mysql 跨库join
Posted 五色风车
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 跨库join相关的知识,希望对你有一定的参考价值。
目标:数据库A中的表可以join数据库B中的表。
环境:Windows系统,免安装版mysql-5.7.22。
需求:数据库中表很多,将表按业务划分到不同的数据库,保存表之间必要的关联关系。
一、开启FEDERATED引擎
执行命令:SHOW ENGINES;,查看mysql数据库中Federated引擎是否开启。下图所示,为未开启。
修改mysql文件夹根目录的my.ini文件(Linux系统修改my.cnf文件):新添加一行,内容为federated,如下图所示:
重启MySQL
再次执行命令:SHOW ENGINES;
,可以看到Federated引擎已开启。
二、新建两个数据库:A和B
A库中添加一张student表:
CREATE TABLE student( id VARCHAR(10) NOT NULL DEFAULT \'\' COMMENT \'主键id\', student_name VARCHAR(10) DEFAULT NULL COMMENT \'学生姓名\', school_id VARCHAR(10) NOT NULL DEFAULT \'\' COMMENT \'学校id\', PRIMARY KEY(id) )ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=\'学生表\';
B库中添加一张school表:
CREATE TABLE school( id VARCHAR(10) NOT NULL DEFAULT \'\' COMMENT \'主键id\', school_name VARCHAR(10) DEFAULT NULL COMMENT \'学校名称\', PRIMARY KEY(id) )ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=\'学校表\';
三、表中添加数据
在数据库A中添加一行数据:
id = 1 student_name = 琚建飞 school_id = 1
在数据库B中添加一行数据:
id=1 school_name = 廊坊师范
四、在数据库A中建立远程表
CREATE TABLE school ( `id` varchar(10) NOT NULL DEFAULT \'\' COMMENT \'主键id\', `school_name` varchar(10) DEFAULT NULL COMMENT \'学校名称\', PRIMARY KEY (`id`) ) ENGINE=FEDERATED DEFAULT CHARSET=utf8 COMMENT=\'学校表-远程表\' CONNECTION=\'mysql://root:root@localhost:3306/b/school\'; -- root:root 远程数据库的账号和密码 -- localhost:3306 远程数据库的ip和端口 -- b 远程数据库的名称 -- school 远程数据库的表名称
五、执行join操作
SELECT s.id, s.student_name, sc.school_name FROM student s JOIN school sc ON s.school_id = sc.id
本地表和远程表
- 对本地表进行更新操作,远程表也会同步更新。
- 删除本地表,远程表不会删除。
- 远程表结构修改,本地表不会更新。
————————————————
版权声明:本文为CSDN博主「琚建飞」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/gnd15732625435/article/details/80270096
以上是关于mysql 跨库join的主要内容,如果未能解决你的问题,请参考以下文章