我有2個類似的表,例如A和B. 我想複製A到B中的插入,以及B到A中的插入來集成兩個用戶系統。我在每一個「後插入觸發器」配置。例如:鏡像表:觸發器,死鎖和隱式提交
DELIMITER $$
CREATE DEFINER = `root`@`localhost` TRIGGER
`after_A_INSERT`
AFTER INSERT ON `A`
FOR EACH ROW BEGIN
INSERT INTO `B`
SET `id` = NEW.`id`,`name` = NEW.`name`;
END$$
DELIMITER ;
DELIMITER $$
CREATE DEFINER = `root`@`localhost` TRIGGER
`after_B_INSERT`
AFTER INSERT ON `B`
FOR EACH ROW BEGIN
INSERT INTO `A`
SET `id` = NEW.`id`,`name` = NEW.`name`;
END$$
DELIMITER ;
如果我在一個插入,觸發器調用乙插入件,但該插入物在乙執行觸發和發生死鎖避免無限循環。
我試着編輯觸發器在執行INSERT之前刪除另一個表觸發器,然後在它之後再次創建它。示例:
DELIMITER $$
CREATE DEFINER = `root`@`localhost` TRIGGER
`after_B_INSERT`
AFTER INSERT ON `B`
FOR EACH ROW BEGIN
DROP TRIGGER IF EXISTS `after_A_INSERT`;
INSERT INTO `A`
SET `id` = NEW.`id`, `name` = NEW.`name`;
/* And CREATE again here */
END$$
DELIMITER ;
但是,CREATE是一種隱式提交的數據定義語言(DDL)語句。因此,這是不能做到的。
我試着用DROP裏面的DROP調用一個PROCEDURE來顯式地處理提交,但是也不可能。
任何建議鏡像這2個表?
UPDATE:使用Bill Karwinsuggestion,我添加了一個origin
字段每個表與相應的默認谷A
或B
。於是,我改變(刪除並重新創建)如下觸發器:在
觸發:B中
...
BEGIN
IF NEW.`origin`='A' THEN
INSERT INTO `B`
SET `id` = NEW.`id`, `name` = NEW.`name`, `origin` = NEW.`origin`;
END IF;
END
觸發:
...
BEGIN
IF NEW.`origin`='B' THEN
INSERT INTO `A`
SET `id` = NEW.`id`, `name` = NEW.`name`, `origin` = NEW.`origin`;
END IF;
END
非常感謝您的專用時間!我測試了它,並且效果很棒! – 2014-10-29 19:15:05