mysql远程跨库联合查询

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/czh500/article/details/85345825

注意:myemployees库和shoppingCart库在同一台物理主机,如果不在同一台物理主机该怎么办呢?下面我会介绍到!

情况一2个库在同一台物理主机

联合查询(不同的2个库,myemployees库和shoppingCart库),这2个库在同一台物理主机上,都在我本机

#联合查询(不同的2个库,myemployees库和shoppingCart库)
SELECT emp01.`employee_id`, emp01.`first_name` FROM myemployees.employees AS emp01 LIMIT 0, 5
UNION
SELECT emp02.`employee_id`, emp02.`first_name` FROM shoppingCart.`employees2` AS emp02;
#
SELECT emp01.`employee_id`, emp01.`first_name` FROM myemployees.employees AS emp01 LIMIT 0, 5
UNION ALL
SELECT emp02.`employee_id`, emp02.`first_name` FROM shoppingCart.`employees2` AS emp02;

情况二2个库不在同一台物理主机(即2个库分别在不同的物理主机)

为了演示效果,我这里使用我的虚拟机,我虚拟机里安装了Linux系统(centos),Linux系统中已经安装了MySql数据库,MySql数据库服务已经启动了,所有的环境已经全部弄好了。

我的Linux系统(centos)的ip是192.168.117.66

我打算我本地的author表和远程的user表进行联合查询

在linux中输入SHOW CREATE TABLE `user`;这句话得到的结果后,我们把

CREATE TABLE IF NOT EXISTS `user` (
  `id` INT(11) DEFAULT NULL,
  `name` VARCHAR(20) DEFAULT NULL
)这句话拷贝到我本地的数据库中,并且在末尾加上

ENGINE =FEDERATED CONNECTION='mysql://root:[email protected]:3306/testDB/user';这句话

CREATE TABLE IF NOT EXISTS `user` (
  `id` INT(11) DEFAULT NULL,
  `name` VARCHAR(20) DEFAULT NULL
)ENGINE =FEDERATED CONNECTION='mysql://root:[email protected]:3306/testDB/user';

其实上面的那段语句,说白了,就是在我本地的数据库中建了一个远程数据库的连接的快捷方式(远程数据库的连接快捷方式)

执行上面的语句即可

对了,还有一点要注意:

你要查一下,你本地的mysql数据库的FEDERATED引擎有没有开启

SHOW ENGINES;

如果FEDERATED是NO的话,说明没有开启,需要你去修改一下mysql数据库的配置文件

修改本地mysql数据库的配置文件,在配置文件末尾加上federated 如下图:

如果你是windows系统的话,就修改这个my.ini文件,如果你用的是Linux系统的话,就修改my.cnf文件

修改完配置文件后记得重启一下mysql的服务

linux重启mysql服务 service mysqld restart

windows重启mysql服务 在dos窗口中,输入net stop mysql服务名再输入net start mysql服务名

OK,全部搞定后,执行sql语句,即可看到跨库查询的查询结果

#
SELECT id, aname FROM author
UNION
SELECT id, `name` FROM `user`;

SELECT * FROM author INNER JOIN  `user`;

猜你喜欢

转载自blog.csdn.net/czh500/article/details/85345825