2013-03-06 115 views
4

我有兩個(InnoDB)表,觸發器用於UPDATE,INSERT和DELETE。如果我直接在桌子上工作,他們工作得很好。更進一步,我有一個外鍵約束,當我刪除tableA中的一行時tableA.id引用的tableB中的所有行也被刪除。這也適用,但問題是:MySQL觸發器不被約束調用

DELETE在tableA上觸發tableA的DELETE觸發器。然後約束刪除表B 處的行,但是沒有調用表B的DELETE觸發器。爲什麼?做約束不會觸發觸發器嗎?

謝謝。

(觸發器AFTER DELETE。有沒有成功之前刪除也試過。)

+0

級聯刪除應觸發另一個表上的觸發器。你使用的是什麼版本的MySQL? – landons 2013-03-06 20:18:07

+0

我正在使用5.5.29。在tableB上我有'CONSTRAINT cname FOREIGN KEY(idA)REFERENCES tableA(id)ON DELETE CASCADE ON UPDATE CASCADE,' – Lorenz 2013-03-06 20:27:54

+0

@landons:在手冊中明確指出,情況並非如此。 – 2013-03-06 20:28:18

回答

8

如果刪除是由外鍵引起的,不會引發觸發器。

From the manual

觸發器目前不被外鍵的動作激活。

+0

_E.1。對存儲程序的限制_那裏我沒有搜索...謝謝。 – Lorenz 2013-03-06 20:32:10

+1

我必須問:推薦的解決方案是什麼?我必須在使用外鍵刪除期間啓動觸發器。我應該添加額外的觸發器來刪除而不是使用外鍵嗎? – boreq 2014-03-05 00:02:46