目標:數據庫A中的表可以join數據庫B中的表。
環境:Windows系統,免安裝版mysql-5.7.22。
需求:數據庫中表很多,將表按業務划分到不同的數據庫,保存表之間必要的關聯關系。
一、開啟FEDERATED引擎
執行命令:SHOW ENGINES;,查看mysql數據庫中Federated引擎是否開啟。下圖所示,為未開啟。
修改mysql文件夾根目錄的my.ini文件(Linux系統修改my.cnf文件):新添加一行,內容為federated,如下圖所示:
重啟MySQL
再次執行命令:SHOW ENGINES;
,可以看到Federated引擎已開啟。
二、新建兩個數據庫:A和B
A庫中添加一張student表:
CREATE TABLE student( id VARCHAR(10) NOT NULL DEFAULT '' COMMENT '主鍵id', student_name VARCHAR(10) DEFAULT NULL COMMENT '學生姓名', school_id VARCHAR(10) NOT NULL DEFAULT '' COMMENT '學校id', PRIMARY KEY(id) )ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='學生表';
B庫中添加一張school表:
CREATE TABLE school( id VARCHAR(10) NOT NULL DEFAULT '' COMMENT '主鍵id', school_name VARCHAR(10) DEFAULT NULL COMMENT '學校名稱', PRIMARY KEY(id) )ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='學校表';
三、表中添加數據
在數據庫A中添加一行數據:
id = 1 student_name = 琚建飛 school_id = 1
在數據庫B中添加一行數據:
id=1 school_name = 廊坊師范
四、在數據庫A中建立遠程表
CREATE TABLE school ( `id` varchar(10) NOT NULL DEFAULT '' COMMENT '主鍵id', `school_name` varchar(10) DEFAULT NULL COMMENT '學校名稱', PRIMARY KEY (`id`) ) ENGINE=FEDERATED DEFAULT CHARSET=utf8 COMMENT='學校表-遠程表' CONNECTION='mysql://root:root@localhost:3306/b/school'; -- root:root 遠程數據庫的賬號和密碼 -- localhost:3306 遠程數據庫的ip和端口 -- b 遠程數據庫的名稱 -- school 遠程數據庫的表名稱
五、執行join操作
SELECT s.id, s.student_name, sc.school_name FROM student s JOIN school sc ON s.school_id = sc.id
本地表和遠程表
- 對本地表進行更新操作,遠程表也會同步更新。
- 刪除本地表,遠程表不會刪除。
- 遠程表結構修改,本地表不會更新。
————————————————
版權聲明:本文為CSDN博主「琚建飛」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/gnd15732625435/article/details/80270096