mysql中的跨库关联合检查询艺术,mysql跨库关联

作业场景:关联分歧数据库中的表的查询

mysql中的跨库关联合检查询艺术,mysql跨库关联

专门的工作场景:关联差别数据库中的表的询问

比如说,要涉及的表是:机器A上的数据库A中的表A &&
机器B上的数据库B中的表B。

这种情景下,想实行“select A.id,B.id from A left join B on
~~~;“这是异常的小概的,但职业须求不可变,数据库设计不可变,那就蛋疼了。。

减轻方案:在机器A上的数据库A中国建工业总会公司3个表B。。。

那当然不是跟你高兴啦,大家应用的是基于MySQL的federated引擎的建表方式。

建表语句示例:

CREATE TABLE `table_name`(......) ENGINE =FEDERATED CONNECTION='mysql://[username]:[password]@[location]:[port]/[db-name]/[table-name]'

前提条件:你的mysql得帮忙federated引擎(施行show
engines;能够看看是还是不是接济)。

图片 1

壹经有FEDERATED引擎,但Support是NO,表达你的mysql安装了这么些引擎,但没启用,去my.cnf文件末增加一行
federated ,重启mysql就能够;

倘使压根就不曾FEDERATED那1行,表达您的mysql就不曾安装这些引擎,那就不可能喜欢的游戏了,最好去找你们家运转解决啊,因为接下去的动作一点都一点都不小,而且本身也不领悟怎么搞;

释疑:通过FEDERATED引擎创立的表只是在本地有表定义文件,数据文件则设有于远程数据库中,通过那几个引擎能够完毕类似Oracle
下DBLINK的中远距离数据访问效果。正是说,这种建表格局只会在数据库A中开创2个表B的表结构文件,表的目录、数据等公事只怕在机械B上的数据库B中,也就是只是在数据库A中开创了表B的1个连忙格局。

于是,蛋就不疼了。。

要求留意的几点:

  1. 地方的表结构必须与长途的一心等同。

2.远程数据库如今仅限MySQL

叁.不支持职业

④.不帮忙表结构修改

别的网上老铁的互补:

CREATE TABLE IF NOT EXISTS `logintoken` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`type` char(1) NOT NULL DEFAULT '0',
`loginName` varchar(20) DEFAULT NULL,
`token` varchar(2000) DEFAULT NULL,
`tokenExpiredTime` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE =FEDERATED CONNECTION='mysql://root:[email protected]:3306/zysso/logintoken';

行使远程伍.1二的 logintoken表,只须求自个儿展开FEDERATED
就足以了,五.12不用开启

业务场景:关联分化数据库中的表的询问
比方说,要提到的表是:机器A上的数据库A中的表A 机器…

多年来事情上有须要,要落到实处类似oracle 的dblink

比如,要涉及的表是:机器A上的数据库A中的表A &&
机器B上的数据库B中的表B。

 

这种气象下,想举办“select A.id,B.id from A left join B on
~~~;“那是不大概的,但业务供给不可变,数据库设计不可变,那就蛋疼了。。

 

杀鸡取蛋方案:在机器A上的数据库A中国建工业总会公司多少个表B。。。

 

那自然不是跟你和颜悦色啦,大家选择的是依据MySQL的federated引擎的建表形式。

 

建表语句示例:

linux版本

CREATE TABLE `table_name`(......) ENGINE =FEDERATED CONNECTION='mysql://[username]:[password]@[location]:[port]/[db-name]/[table-name]'

Server version: 5.6.28-0ubuntu0.14.04.1 (Ubuntu)

前提条件:你的mysql得帮忙federated引擎(实施show
engines;能够看看是或不是援助)。

修改配置文件 /etc/mysql/my.cnf

图片 2

windows 版本

若果有FEDERATED引擎,但Support是NO,表达你的mysql安装了这些引擎,但没启用,去my.cnf文件末增多1行
federated ,重启mysql就可以;

 Server version: 5.6.21-log MySQL
Community Server (GPL)

纵然压根就从未FEDERATED那一行,表明您的mysql就从未有过安装这么些引擎,那就不能够洋洋得意的玩耍了,最佳去找你们家运行解决啊,因为接下去的动作一点都不小,而且小编也不理解怎么搞;

修改配置文件my.ini

批注:通过FEDERATED引擎创设的表只是在地面有表定义文件,数据文件则设有于远程数据库中,通过那几个引擎能够兑现类似Oracle
下DBLINK的长距离数据访问效果。正是说,这种建表情势只会在数据库A中开创二个表B的表结构文件,表的目录、数据等文件可能在机器B上的数据库B中,也正是只是在数据库A中制造了表B的一个火速格局。

 

于是乎,蛋就不疼了。。

 

内需留意的几点:

随后将其展开,在 [mysqld] 下加多1行:

  1. 本地的表结构必须与远程的完全一致。

 

二.远程数据库近日只限MySQL

federated

③.不帮助工作

重启Mysql,完成。

4.不帮忙表结构修改

 

任何网上朋友的补充:

mysql> show engines;

CREATE TABLE IF NOT EXISTS `logintoken` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`type` char(1) NOT NULL DEFAULT '0',
`loginName` varchar(20) DEFAULT NULL,
`token` varchar(2000) DEFAULT NULL,
`tokenExpiredTime` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE =FEDERATED CONNECTION='mysql://root:root@192.168.5.102:3306/zysso/logintoken';

+——————–+———+—————————————————————-+————–+——+————+

接纳远程伍.12的 logintoken表,只须要自个儿展开FEDERATED
就可以了,5.1二不用开启

| Engine             | Support | Comment                                
                       | Transactions | XA   | Savepoints |

+——————–+———+—————————————————————-+————–+——+————+

| MyISAM             | YES     | MyISAM storage engine                  
                       | NO           | NO   | NO         |

| CSV                | YES     | CSV storage engine                    
                        | NO           | NO   | NO         |

| MRG_MYISAM         | YES     | Collection of identical MyISAM tables
                         | NO           | NO   | NO         |

| BLACKHOLE          | YES     | /dev/null storage engine (anything you
write to it disappears) | NO           | NO   | NO         |

| MEMORY             | YES     | Hash based, stored in memory, useful
for temporary tables      | NO           | NO   | NO         |

| PERFORMANCE_SCHEMA | YES     | Performance Schema                    
                        | NO           | NO   | NO         |

| ARCHIVE            | YES     | Archive storage engine                
                        | NO           | NO   | NO         |

| InnoDB             | DEFAULT | Supports transactions, row-level
locking, and foreign keys     | YES          | YES  | YES        |

| FEDERATED          | NO      | Federated MySQL storage engine        
                        | NULL         | NULL | NULL       |

+——————–+———+—————————————————————-+————–+——+————+

9 rows in set (0.00 sec)

 

 

 

 

 

内燃机表达

地点MySQL数据库要拜访远程MySQL数据库的表中的数量, 必须通过FEDERATED存款和储蓄引擎来促成. 有一些类似Oracle中的

数据库链接(DBLINK). 要允许这一个蕴藏引擎, 当创设MySQL时选择–with-federated-storage-engine来configure.  

当成立二个FEDERATED表的时候, 服务器在数据库目录创设三个表定义文件. 文件由表的名字开始, 并有2个.frm扩张名. 

无其余文件被创建, 因为实际的数量在一个长距离数据库上. 使用FEDERATED表的步调是极度简单的. 平日, 运转多少个服务器, 

抑或在同1个主机上, 要么在分裂主机上. 

首先, 必须在想要用FEDERATED表访问的长途服务器上有二个表. 假诺, 远程的表在DB_FED数据库中并且被如下概念:  

CREATE TABLE test_table (

    id     int(20) NOT NULL auto_increment,

    name   varchar(32) NOT NULL default ”,

    other  int(20) NOT NULL default ‘0’,

发表评论

电子邮件地址不会被公开。 必填项已用*标注