1.第一種跨庫查詢,是在同一個mysql伺服器下兩個不同的資料庫之間的聯查,關係如下圖
##在同一個mysql伺服器下,不同的兩個資料直接加上函式庫名就可以實作跨函式庫查詢了select * from t_test1 t1, test2.t_test2 t2 where t1.id = t2.id執行sql查詢到一下結果 2.第二種跨庫查詢,是在兩台不同伺服器(實體伺服器)上分別安裝的mysql伺服器,實現跨庫查詢,其實現原理類似一個虛擬映射,需要用到mysql的另一個儲存引擎Federated,FEDERATED儲存引擎存取在遠端資料庫的表中的數據,而不是本地的表。 這個特性為某些開發應用程式帶來了便利,你可以直接在本地建立一個federated表來連接遠端資料表,配置了之後本地表的資料可以直接跟遠端資料表同步。事實上,這個引擎並沒有實際儲存數據,它所需的數據都透過連接到其他MySQL伺服器上取得。 mysql預設沒有開啟federated儲存引擎,需要在設定檔裡面開啟;
#在[mysqld] 下 添加 federated 然后重启mysql服务就可以了 [mysqld] federated如下圖:
#输入命令查看引擎开启状态 show engines;可以看到,已經開啟了 然後就可在test1資料庫上建立虛擬表了,將test2庫上t_test2表映射到test1庫上面
CREATE TABLE `t_test2` ( `id` int NOT NULL, `name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=FEDERATED DEFAULT CHARSET=utf8mb3 COMMENT='远程测试表t_test2' CONNECTION='mysql://root:123456@127.0.0.1:3306/test2/t_test2' ; /** CONNECTION='mysql://root:123456$@127.0.0.1:3306/test2/t_test2' 这个配置是关键 root:代表远程数据库的用户 123456:代表远程数据的密码 127.0.0.1:代表远程数据库的ip地址,域名也可以 test2:代表远程数据库的数据库名称 t_test2:代表远程数据库中的哪一张表 **/#執行sql語句 可以看到建立了一張t_test2的表,這張表其實不存在只是一個遠端的映射而已 可以看到使用FEDERATED引擎 表格建立完成後就可以寫sql了
select * from t_test1 t1, t_test2 t2 where t1.id = t2.id可以看到執行結果
federated使用注意事項:1.本地建立的表名必須在遠端伺服器存在,建立的字段也必須是遠端表中的字段,可以比遠端表格的欄位少,但是不能多,本地儲存引擎選擇2.對本機虛擬表的結構修改,並不會修改遠端資料表的結構 3.truncate 指令,會清除遠端表資料 4.drop指令只會刪除虛擬表,並不會刪除遠端表5.select count(*), select * from limit M, N 等語句執行效率非常低,資料量較大時有很嚴重的問題,但是按主鍵或索引列查詢,則很快,如以下查詢就非常慢(假設id 為主索引)
select id from db.tablea where id >100 limit 10 ;
以上是mysql跨庫查詢問題如何解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!