MySQL如何實(shí)現(xiàn)跨庫join查詢
MySQL實(shí)現(xiàn)跨庫join查詢
同服務(wù)器的不同庫
只需要在表名前加上db_name
select * from userdb.user u join orderdb.`order` o on u.id = o.user_id;
不同服務(wù)器的不同庫
1.查看配置 FEDERATED
SHOW engines;

如果是NO,需要改為YES.默認(rèn)是NO
在my.ini文件中增加一行,重啟MySQL 服務(wù)即可
federated
2.在本地庫創(chuàng)建相同的表建立連接
CREATE TABLE `order` ( `id` bigint NOT NULL AUTO_INCREMENT, `user_id` bigint NOT NULL, `product_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE =FEDERATED CONNECTION='mysql://root:123456@192.168.10.100:3306/orderdb/order';
注意:本地創(chuàng)建的表名必須在遠(yuǎn)程服務(wù)器存在,創(chuàng)建的字段也必須是遠(yuǎn)程表中的字段,可以比遠(yuǎn)程表的字段少,但是不能多,本地存儲(chǔ)引擎選擇:ENGINE =FEDERATED,
CONNECTION選項(xiàng)中的連接字符串的一般形式如下:
scheme://user_name[:password]@host_name[:port_num]/db_name/tbl_name
配置密碼作為純文本的話會(huì)存在安全問題,運(yùn)行show create table,show table status是可以見的
note:
- 本地表結(jié)構(gòu)必須與遠(yuǎn)程完全一樣
- 遠(yuǎn)程數(shù)據(jù)庫只能連接MySql;
- 不支持事務(wù);
- 不支持表結(jié)構(gòu)的修改
- 本地表更新,遠(yuǎn)程表也同步更新,反之亦然
- 刪除本地表,遠(yuǎn)程表不會(huì)刪除
數(shù)據(jù)庫跨庫join方案
最好不要出現(xiàn)跨庫join,應(yīng)該在設(shè)計(jì)的時(shí)候就避免。
將需要join的表放在同一數(shù)據(jù)庫,即便是分庫分表看能不能按相同維度分到一起。
或者看能不能設(shè)冗余字段,避免關(guān)聯(lián)查詢。
那如果無法避免跨庫join,也應(yīng)該走微服務(wù)API查詢,或者使用中間件實(shí)現(xiàn)。
比如:
1.調(diào)用兩個(gè)服務(wù)API分別查詢,再組裝數(shù)據(jù);
2.利用Canal,將數(shù)據(jù)同步到業(yè)務(wù)系統(tǒng)數(shù)據(jù)庫;
3.將兩個(gè)服務(wù)的數(shù)據(jù)實(shí)時(shí)同步到一個(gè)只讀庫,然后在只讀庫查詢;
一定要跨庫join,MySQL也是可以支持的:
1.開啟FEDERATED引擎,修改my.ini(或my.cnf)文件新添加一行,內(nèi)容為federated,然后重啟MySQL。
2.在數(shù)據(jù)庫中建立遠(yuǎn)程表,通過參數(shù)CONNECTION='mysql://username:pwd@ip:端口/庫名/表名
3.直接在SQL語句使用join即可。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
windows下mysql數(shù)據(jù)庫主從配置教程
這篇文章主要為大家詳細(xì)介紹了windows下mysql數(shù)據(jù)庫主從配置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
win10下mysql 8.0.16 winx64安裝配置方法圖文教程
這篇文章主要為大家詳細(xì)介紹了win10下mysql 8.0.16 winx64安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05
mysql mysqldump只導(dǎo)出表結(jié)構(gòu)或只導(dǎo)出數(shù)據(jù)的實(shí)現(xiàn)方法
mysql mysqldump只導(dǎo)出表結(jié)構(gòu)或只導(dǎo)出數(shù)據(jù)的實(shí)現(xiàn)方法,需要的朋友可以參考下。2011-11-11
圖文詳解MySQL中兩表關(guān)聯(lián)的連接表如何創(chuàng)建索引
這篇文章通過圖文給大家介紹了關(guān)于MySQL中兩表關(guān)聯(lián)的連接表如何創(chuàng)建索引的相關(guān)資料,文中介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-05-05
mysql中數(shù)據(jù)統(tǒng)計(jì)的技巧備忘錄
mysql是常用數(shù)據(jù)庫,對于數(shù)字操作相關(guān)的東西相當(dāng)方便,這篇文章主要給大家介紹了關(guān)于mysql中數(shù)據(jù)統(tǒng)計(jì)技巧的相關(guān)資料,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2018-05-05

