MySQL跨庫數據表映射方案


問題導入

​ 在實際開發中,我們可能會遇到跨庫查詢數據的需要,可能是同一連接下的不同數據庫的表,或是遠程數據庫的表。為了開發方便,我們通常會把異庫的表映射到本地來讀取數據。本文來說說MySQL下的處理辦法,其他數據庫思路相同,可能具體過程略有差異。

一、同一連接下的不同數據庫通過視圖映射到本地

假設在同一連接下有數據庫db1和db2,現需要將db2.user表映射到db1中,可以使用如下語句在db1中創建視圖

CREATE OR REPLACE VIEW db1.vuser AS SELECT * FROM db2.user

創建視圖

db2.user成功映射到db1中

跨庫創建視圖

在這樣 我們對db1.vuser中的數據增刪改查,就可以直接影響到db2.user,當然前提是擁有操作db2.user相關操作權限,把我們db2中需要的表通過視圖全部映射到db1中,我們就可以像操作本地庫一樣操作異庫。

二、不同服務下通過FEDERATED存儲引擎訪問在遠程數據庫的表中的數據

Federate存儲引擎也是mysql比較常用的存儲引擎,使用它可以訪問遠程的mysql數據庫上的表,這種引擎的作用類似於oracle數據庫的dblink

1.查看federated引擎是否開啟

點擊進入Navicat並點擊鍵盤上F6,出現命令行界面 ,輸入指令:show engines;

show engines

以上說明federated已經安裝但是並沒有開啟

2.開啟federated引擎

Windows系統 : 在my.ini的[mysqld]中加入federated(注意:我這里是mysql解壓版,直接在解壓目錄就可以找到ini文件,安裝版該文件路徑可能有出入)

federated

重啟mysql服務,管理員打開CMD

cmd>net stop mysql
cmd>net start mysql

重啟mysql服務

Linux操作系統:vi /etc/my.cnf(以實際路徑為准),加入一行federated,保存並退出

重啟mysql服務

mysql>service mysqld restart

再次查看,輸入指令:show engines;

3.創建fedearted表

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

name--mysql用戶名

pass--mysql密碼

location--ip

port:端口號

db-name:數據庫名

table-name:表名

例子:

CREATE TABLE `user`  (
  `Id` int(0) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `UserName` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  `Name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名',
  `Password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '密碼',
  `Status` int(0) NOT NULL COMMENT '狀態1有效0無效',
  `LastLoginTime` datetime(0) NULL DEFAULT NULL,
  `CreateTime` datetime(0) NULL DEFAULT NULL,
  `Email` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  PRIMARY KEY (`Id`) USING BTREE
) ENGINE = FEDERATED CONNECTION='mysql://root:root@遠程數據庫IP:3306/admboot/user';

至此遠程數據庫的user表就同步到我們本地數據庫上了。我們就可以像操作本地庫一樣操作遠程數據庫了。

注意事項:

  1. 對本地虛擬表的結構修改,並不會修改遠程表的結構
  2. truncate 命令,會清除遠程表數據
  3. drop命令只會刪除虛擬表,並不會刪除遠程表
  4. 不支持 alter table 命令
  5. 使用索引時,虛擬表與實體表應同步建立索引

三、跨庫操作的其他方案

跨庫操作的方案有很多種,比如我們還可以在程序上支持多庫連接,那么在數據庫上我們什么都不需要做,在程序中設置好對應數據庫數據即可。

優點:

  • 不受數據庫類型限制,主庫和從庫可以是不同的數據庫。
  • 不建立數據庫鏈,查詢速度快。

缺點:

  • 表間關聯查詢只能在內存中進行
  • 多庫事務一致性不好處理

比如還可以通過接口的方式調用從庫數據,等等。大家還有什么比較好的方案可以留言探討。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM