【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. 遠程表結構修改,本地表不會更新。
原文地址:https://blog.csdn.net/gnd15732625435/article/details/80270096


免責聲明!

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



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