首頁  >  文章  >  資料庫  >  mysql跨庫查詢問題如何解決

mysql跨庫查詢問題如何解決

PHPz
PHPz轉載
2023-05-27 14:03:282908瀏覽

1.第一種跨庫查詢,是在同一個mysql伺服器下兩個不同的資料庫之間的聯查,關係如下圖

mysql跨庫查詢問題如何解決

##在同一個mysql伺服器下,不同的兩個資料直接加上函式庫名就可以實作跨函式庫查詢了

select * from t_test1 t1, test2.t_test2 t2 where t1.id = t2.id

mysql跨庫查詢問題如何解決

執行sql查詢到一下結果

mysql跨庫查詢問題如何解決

2.第二種跨庫查詢,是在兩台不同伺服器(實體伺服器)上分別安裝的mysql伺服器,實現跨庫查詢,其實現原理類似一個虛擬映射,需要用到mysql的另一個儲存引擎Federated,FEDERATED儲存引擎存取在遠端資料庫的表中的數據,而不是本地的表。

這個特性為某些開發應用程式帶來了便利,你可以直接在本地建立一個federated表來連接遠端資料表,配置了之後本地表的資料可以直接跟遠端資料表同步。事實上,這個引擎並沒有實際儲存數據,它所需的數據都透過連接到其他MySQL伺服器上取得。

mysql預設沒有開啟federated儲存引擎,需要在設定檔裡面開啟;

#在[mysqld] 下 添加 federated 然后重启mysql服务就可以了
[mysqld]
federated

如下圖:

mysql跨庫查詢問題如何解決

#输入命令查看引擎开启状态
show engines;

可以看到,已經開啟了

mysql跨庫查詢問題如何解決

然後就可在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語句

mysql跨庫查詢問題如何解決

可以看到建立了一張t_test2的表,這張表其實不存在只是一個遠端的映射而已

mysql跨庫查詢問題如何解決

可以看到使用FEDERATED引擎

mysql跨庫查詢問題如何解決

表格建立完成後就可以寫sql了

select * from t_test1 t1, t_test2 t2 where t1.id = t2.id

可以看到執行結果

mysql跨庫查詢問題如何解決

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中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除