Mysql远程跨库多表联合查询的解决方案

1、前言

在数据库 testDB01中新建数据表t_student(学生信息)

CREATE TABLE `t_student` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `name` varchar(255) DEFAULT NULL COMMENT '姓名',
  `gender` varchar(6) DEFAULT NULL COMMENT '性别',
  `age` tinyint(4) DEFAULT NULL COMMENT '年龄',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='学生信息';

在这里插入图片描述
在数据库 testDB02中新建数据表t_student(学生成绩信息)

CREATE TABLE `student_score` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `student_id` int(11) DEFAULT NULL COMMENT '学员id',
  `score` varchar(255) DEFAULT NULL COMMENT '分数',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='学生成绩信息';

在这里插入图片描述
现在需要查询统计的结果为,学员姓名、年龄、成绩

2、查看数据库是否支持FEDERATED,

show engines

在这里插入图片描述
修改数据库的配制文件my.ini,(我的my.ini的路径为:D:\ProgramData\MySQL\MySQL Server 5.7/my.ini),将federated添加到my.ini文件中

在这里插入图片描述
修改完my.ini文件后,在开始中输入"服务"回车,进入“服务”页面
在这里插入图片描述
如下图,在“服务”页面,选中“MySQL57”,右键重新启动。
在这里插入图片描述
然后再次查看数据库是否支持FEDERATED,如下图,已显示"YES"
在这里插入图片描述

3、在testDB02数据库中执行以下脚步:

CREATE TABLE `t_student` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `name` varchar(255) DEFAULT NULL COMMENT '姓名',
  `gender` varchar(6) DEFAULT NULL COMMENT '性别',
  `age` tinyint(4) DEFAULT NULL COMMENT '年龄',
  PRIMARY KEY (`id`)
) ENGINE=FEDERATED AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='学生信息'
CONNECTION='mysql://root:[email protected]:3306/testDB01/t_student'

在这里插入图片描述
如上图,左边testdb02数据库中,选中“表”右键刷新,就可以看到testdb02数据库中多了t_student表,然后就可以在testdb02数据库中进行多表连接查询了

select t.name as '姓名',t.gender as '性别',s.score as '分数'
from student_score s,t_student t
where s.student_id = t.id

在这里插入图片描述

4、在testdb01数据库中t_student表中添加一 条数据,

在这里插入图片描述
然后在testdb02数据库中查询t_student表中的数据,确认是否有刚才新增的"陈葱"的记录,如下图,"陈葱"的记录也可以查到
在这里插入图片描述

5、在testdb02数据库,执行一条修改t_student数据表的语句,然后查看testdb01数据库中的t_student中的数据是否也进行了改动

update t_student set name = '小亮-che' where id = 1;

在这里插入图片描述
如下图,testdb01数据库的id为1的学生姓名已改为"小亮-che"
在这里插入图片描述

6、CONNECTION还可以使用另外一种方式(需要注意的是SERVER , WRAPPER):

CREATE SERVER server_student
    FOREIGN DATA WRAPPER mysql
    OPTIONS (HOST '127.0.0.1',USER 'root',PASSWORD '123456' ,PORT 3306,DATABASE 'testdb01');
CREATE TABLE `t_student_2` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `name` varchar(255) DEFAULT NULL COMMENT '姓名',
  `gender` varchar(6) DEFAULT NULL COMMENT '性别',
  `age` tinyint(4) DEFAULT NULL COMMENT '年龄',
  PRIMARY KEY (`id`)
) ENGINE=FEDERATED AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='学生信息'
CONNECTION='server_student'

在这里插入图片描述

7、小结

   本示例演示的是本地两个数据库之间的两张表连接查询,实际生产环境是可以支持不在两台不在同一个服务器上的两个数据库之间的数据库之间的连接查询的。
发布了122 篇原创文章 · 获赞 152 · 访问量 112万+

猜你喜欢

转载自blog.csdn.net/ytangdigl/article/details/105465317