萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> MySQL實現兩張表數據的同步方法總結

MySQL實現兩張表數據的同步方法總結

下面我們來看一篇關於MySQL實現兩張表數據的同步方法總結,希望這篇文章能夠幫助到各位朋友,有興趣的朋友可以進來看看吧。


有兩張表A和B,要求往A裡面插入一條記錄的同時要向B裡面也插入一條記錄,向B裡面插入一條記錄的同時也向A插入一條記錄。兩張表的結構不同,需要將其中幾個字段對應起來。可以用下面的觸發器實現。

表A的觸發器:

begin

set @disable=1;

if @disable=1 and NOT EXISTS(SELECT 1 FROM tableB where ID=new.ID) then  

insert into tableB (ID,對應字段1) values(new.ID,new.對應字段1);

end if;

set @disable=0;

end

表B的觸發器:

begin

set @disable=1;

if @disable=1 and NOT EXISTS(SELECT 1 FROM tableA where ID=new.ID) then  

insert into tableA (ID,對應字段1) values(new.ID,new.對應字段1);

end if;

set @disable=0;

end

mysql通過觸發器實現兩個表的同步

目前,在本地測試成功。

假設本地的兩個數據庫a和b,a下有表table1(id, val) b下有表table2(id, val)
假設希望當table1中數據更新,table2中數據同步更新。
代碼:

DELIMITER $$
CREATE
/*[DEFINER = { user | CURRENT_USER }]*/
TRIGGER `a`.`觸發器名` BEFORE UPDATE
ON `a`.`table1`
FOR EACH ROW BEGIN
IF new.id!=old.id THEN
UPDATE `b`.`table2` SET `b`.`table2`.id=new.id WHERE `b`.`table2`.val=old.val;
END IF;
END$$
DELIMITER ;

網上找了很多代碼,在phpadmin中運行都不成功,總是語法錯誤,phpmyadmin也不能可視化建立觸發器,所以找了另一個mysql管理工具,SQLyog。這個工具比較好,java寫的,可以通過界面創建觸發器,然後再把代碼拷到phpmyadmin中運行,成功!

分別創建增加、刪除、更新的觸發器(Trigger)來達到兩張表之間數據同步的目的。

1:數據同步增加:
 
如有兩張表——A表和B表,創建觸發器使當A表插入數據後B表也同步插入數據。其中B表插入數據的字段需要同A表中的字段相對應。

CREATE TRIGGER 觸發器名稱
ON A表
AFTER INSERT
AS BEGIN INSERT INTO
B表(B表字段1,B表字段2,B表字段3)
SELECT A表字段1,A表字段2,A表字段3
FROM INSERTED
END

2.數據同步刪除:

如有兩張表——A表和B表,創建觸發器使當A表刪除數據後B表也同步刪除數據。其中B表與A表應有相應主鍵關聯。

CREATE TRIGGER 觸發器名稱
ON A表
AFTER DELETE
AS BEGIN DELETE B表
WHERE
B表主鍵 IN(
SELECT A表主鍵
FROM DELETED)
END


3.數據同步更新:
 
如有兩張表——A表和B表,創建觸發器使當A表數據更新後B表也同步更新數據。

CREATE TRIGGER 觸發器名稱
ON A表
AFTER UPDATE
AS
update B表
SET
B.B表字段1=A.A表字段1
FROM
B表 AS B,INSERTED AS A
WHERE B.B表主鍵=A.A表主鍵

理解觸發器裡面的兩個臨時的表:Deleted , Inserted 。注意Deleted 與Inserted分別表示觸發事件的表“舊的一條記錄”和“新的一條記錄”

copyright © 萬盛學電腦網 all rights reserved