那麼你可能已經使用日誌表(general_log不會幫你這個),代碼檢查了它自己這樣
表的模式
CREATE TABLE a (id INT);
CREATE TABLE b (id INT);
CREATE TABLE c (id INT);
DROP TABLE IF EXISTS tg_log;
CREATE TABLE tg_log
(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
message VARCHAR(512)
);
觸發器
DROP TRIGGER IF EXISTS tg_a;
DELIMITER $$
CREATE TRIGGER tg_a
AFTER INSERT ON a
FOR EACH ROW
BEGIN
INSERT INTO tg_log(message) VALUES('tg_a START');
INSERT INTO b VALUES (NEW.id);
INSERT INTO tg_log(message) VALUES('tg_a INSERT INTO b');
UPDATE b SET id = id + 1 WHERE id = NEW.id;
INSERT INTO tg_log(message) VALUES('tg_a UPDATE b');
INSERT INTO tg_log(message) VALUES('tg_a END');
END$$
DELIMITER ;
DROP TRIGGER IF EXISTS tg_b;
DELIMITER $$
CREATE TRIGGER tg_b
AFTER INSERT ON b
FOR EACH ROW
BEGIN
INSERT INTO tg_log(message) VALUES('tg_b START');
INSERT INTO c VALUES (NEW.id);
INSERT INTO tg_log(message) VALUES('tg_b INSERT INTO c');
INSERT INTO tg_log(message) VALUES('tg_b END');
END$$
DELIMITER ;
然後我們行插入表中
INSERT INTO a VALUES(1);
這裏就是我們在出日誌中看到
+----+---------------------+--------------------+
| id | dt | message |
+----+---------------------+--------------------+
| 1 | 2013-07-27 23:31:42 | tg_a START |
| 2 | 2013-07-27 23:31:42 | tg_b START |
| 3 | 2013-07-27 23:31:42 | tg_b INSERT INTO c |
| 4 | 2013-07-27 23:31:42 | tg_b END |
| 5 | 2013-07-27 23:31:42 | tg_a INSERT INTO b |
| 6 | 2013-07-27 23:31:42 | tg_a UPDATE b |
| 7 | 2013-07-27 23:31:42 | tg_a END |
+----+---------------------+--------------------+
7 rows in set (0.00 sec)
這裏是SQLFiddle演示
爲什麼插入到然後upd ating B?你應該發佈,你實際上想要做什麼。我相信它可以用另一種方式解決。 – fancyPants
它只是一個問題 - 如果事實證明觸發器A完成了第一次,我會有一個很好的小多米諾骨牌效應,通過一堆表更新 - 如果沒有,我會有一個潛在的混亂總是在災難邊緣搖搖欲墜。 –