营业场景:关联差别数据库中的表的查询
比如说,要关联的表是:机械A上的数据库A中的表A && 机械B上的数据库B中的表B。
这类情况下,想实行“select A.id,B.id from A left join B on ~~~;“那是不可能的,但营业需求不可变,数据库设想不可变,这就蛋疼了。。
解决方案:在机械A上的数据库A中建一个表B。。。
这固然不是跟你开顽笑啦,我们采纳的是基于MySQL的federated引擎的建表体式格局。
建表语句示例:
CREATE TABLE `table_name`(......) ENGINE =FEDERATED CONNECTION='mysql://[username]:[password]@[location]:[port]/[db-name]/[table-name]'
前提条件:你的mysql得支撑federated引擎(实行show engines;能够看到是不是支撑)。
假如有FEDERATED引擎,但Support是NO,申明你的mysql装置了这个引擎,但没启用,去my.cnf文件末增加一行 federated ,重启mysql即可;
假如压根就没有FEDERATED这一行,申明你的mysql就没有装置这个引擎,这就不能兴奋的游玩了,最好去找你们家运维搞定吧,由于接下来的行动比较大,而且我也不知道怎么搞;
诠释:经由过程FEDERATED引擎建立的表只是在当地有表定义文件,数据文件则存在于长途数据库中,经由过程这个引擎能够完成相似Oracle 下DBLINK的长途数据接见功用。就是说,这类建表体式格局只会在数据库A中建立一个表B的表构造文件,表的索引、数据等文件照样在机械B上的数据库B中,相当于只是在数据库A中建立了表B的一个快捷体式格局。
因而,蛋就不疼了。。
须要注重的几点:
1. 当地的表构造必需与长途的完整一样。
2.长途数据库现在仅限MySQL
3.不支撑事件
4.不支撑表构造修正
其他网友的补充:
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';
运用长途5.12的 logintoken表,只须要本身开启FEDERATED 就能够了,5.12不必开启。
相干引荐:
Oracle怎样完成跨库查询
跨库事件一致性问题的解决方案(例)
[MSSQL]SQLServer跨库查询
以上就是mysql中的跨库关联查询方法实例的细致内容,更多请关注ki4网别的相干文章!