mysql 跨庫join


目標:數據庫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

 

 

 

 

本地表和遠程表

  1. 對本地表進行更新操作,遠程表也會同步更新。
  2. 刪除本地表,遠程表不會刪除。
  3. 遠程表結構修改,本地表不會更新。


————————————————
版權聲明:本文為CSDN博主「琚建飛」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/gnd15732625435/article/details/80270096


免責聲明!

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



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