Java培训Mycat跨库关联查询

发布时间:2020年07月08日作者:atguigu浏览次数:1,002

跨库关联查询

1、ER表

为了相关联的表的行尽量分在一个库下,订单详情表(orders_detail)与订单表紧密关联,订单表分表,为保证关联查询结果正确,必须对订单详情表进行分表,用ER表的方式参考订单表的分表进行分表。

  • 修改配置文件schema.xml

<?xml version=”1.0″?>

<!DOCTYPE mycat:schema SYSTEM “schema.dtd”>

<mycat:schema xmlns:mycat=”http://io.mycat/”>

        <schema name=”TESTDB” checkSQLschema=”false” sqlMaxLimit=”100″ dataNode=”dn1″>

                <table name=”customer” dataNode=”dn2″ ></table>

                <table name=”orders” dataNode=”dn1,dn2″  rule=”mod_rule” >

                    <childTable name=”orders_detail” primaryKey=”id” joinKey=”order_id” parentKey=”id” />

                </table>

        </schema>

        <dataNode name=”dn1″ dataHost=”host1″ database=”atguigu_mc” />

        <dataNode name=”dn2″ dataHost=”host2″ database=”atguigu_sm” />

……

Java培训Mycat跨库关联查询

  • 重启Mycat

          先在另一个库里创建订单详情表,之后重启Mycat,让新配置生效

  • 验证

连接Mycat向订单表插入数据

注:表名后必须加上相关字段,告知Mycat关键字段

INSERT INTO orders_detail(id,detail,order_id) values(1,’detail1′,1);

INSERT INTO orders_detail(id,detail,order_id) VALUES(2,’detail1′,2);

INSERT INTO orders_detail(id,detail,order_id) VALUES(3,’detail1′,3);

INSERT INTO orders_detail(id,detail,order_id) VALUES(4,’detail1′,4);

INSERT INTO orders_detail(id,detail,order_id) VALUES(5,’detail1′,5);

INSERT INTO orders_detail(id,detail,order_id) VALUES(6,’detail1′,6);

执行成功后,分别去两个数据库查看,两个客户的订单详情已分到两个表里。可以把订单表和订单详情表关联查询,可以查询到正确结果。

Java培训Mycat跨库关联查询

2、全局表

设定为全局的表,会直接复制给每个数据库一份,所有写操作也会同步给多个库。

所以全局表一般不能是大数据表或者更新频繁的表。

一般是字典表或者系统表为宜。

  • 修改配置文件schema.xml

<?xml version=”1.0″?>

<!DOCTYPE mycat:schema SYSTEM “schema.dtd”>

<mycat:schema xmlns:mycat=”http://io.mycat/”>

        <schema name=”TESTDB” checkSQLschema=”false” sqlMaxLimit=”100″ dataNode=”dn1″>

                <table name=”customer” dataNode=”dn2″ ></table>

                <table name=”orders” dataNode=”dn1,dn2″  rule=”mod_rule” ></table>

                 <table name=”dict_order_type” dataNode=”dn1,dn2″ type=”global” ></table>

        </schema>

        <dataNode name=”dn1″ dataHost=”host1″ database=”atguigu_mc” />

        <dataNode name=”dn2″ dataHost=”host2″ database=”atguigu_sm” />

……

Java培训Mycat跨库关联查询

  • 重启Mycat

          先在另一个库里创建订单状态字典表,之后重启Mycat,让新配置生效

  • 验证

连接Mycat向订单状态字典表插入数据

注:表名后必须加上相关字段,告知Mycat关键字段

INSERT INTO dict_order_type(id,order_type) values(101,’type1′);

INSERT INTO dict_order_type(id,order_type) VALUES(102,’type2′);

执行成功后,分别去两个数据库查看,两个订单状态字典表都有全量数据。


上一篇:
下一篇:
相关课程

java培训 大数据培训 前端培训 UI/UE设计培训

关于尚硅谷
教育理念
名师团队
学员心声
资源下载
视频下载
资料下载
工具下载
加入我们
招聘岗位
岗位介绍
招贤纳师
联系我们
全国统一咨询电话:010-56253825
地址:北京市昌平区宏福科技园2号楼3层(北京校区)

深圳市宝安区西部硅谷大厦B座C区一层(深圳校区)

上海市松江区谷阳北路166号大江商厦3层(上海校区)

武汉市东湖高新开发区东湖网谷(武汉校区)

西安市雁塔区和发智能大厦B座3层(西安校区)