IT序号网

【MySQL】跨库join知识解答

lxf 2021年06月14日 数据库 149 0

目标:数据库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
   

操作结果:

这里写图片描述

本地表和远程表

  1. 对本地表进行更新操作,远程表也会同步更新。
  2. 删除本地表,远程表不会删除。
  3. 远程表结构修改,本地表不会更新。
原文地址:https://blog.csdn.net/gnd15732625435/article/details/80270096

发布评论
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

实操手册:如何玩转跨库Join跨数据库实例查询应用实践知识解答
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。