跨库关联查询
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′);
执行成功后,分别去两个数据库查看,两个订单状态字典表都有全量数据。
上一篇: 前端培训ajax都有哪些优点和缺点
下一篇: Java培训Mycat全局序列