目标:数据库A中的表可以join数据库B中的表。
环境:Windows系统,免安装版mysql-5.7.22。
需求:数据库中表很多,将表按业务划分到不同的数据库,保存表之间必要的关联关系。
执行命令:SHOW ENGINES;
,查看mysql数据库中Federated引擎是否开启。下图所示,为未开启。
SHOW ENGINES;
,可以看到Federated引擎已开启。 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 = 廊坊师范
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 远程数据库的表名称
SELECT s.id, s.student_name, sc.school_name
FROM student s JOIN school sc ON s.school_id = sc.id
操作结果:
原文:https://www.cnblogs.com/jpfss/p/12171591.html