有兩張表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分別表示觸發事件的表“舊的一條記錄”和“新的一條記錄”