2011-05-18 140 views
20

我在MySQL中有表「A」。它有一些對其他表格(「B」,「C」,「D」...)進行級聯刪除的參考。當某些東西從「A」刪除時,我需要使用觸發器。當我直接從「A」刪除記錄時,此觸發器起作用。但它不適用於級聯刪除。 是否有任何版本的MySQL存在的地方我的觸發器將與級聯刪除工作?或者,也許,還有另一種方式來調用級聯刪除觸發器調用

+1

這是在應用程序代碼中執行邏輯的一個參數,而不是觸發器和級聯的複雜設置。 – 2016-04-30 18:56:26

回答

22

http://dev.mysql.com/doc/refman/5.6/en/innodb-restrictions.html

級聯外鍵的動作不激活觸發器

換句話說,你不能用級聯刪除使用觸發器。

+37

我每天討厭mysql更多 – 2012-04-16 19:47:08

+1

是的,他們在過去的5年裏沒有做任何修復。 – boreq 2012-10-09 12:57:13

+1

我剛剛發現這個問題,它是超級愚蠢的:-( – 2015-04-04 05:48:45

4

總結從@Niel德威特和@Browny林答案:

  1. 可悲的是級聯刪除不會在MySQL激活觸發器。
  2. 一種解決方案是不使用級聯刪除,而是通過另一個觸發器實現自動刪除。
+1

使用另一個刪除觸發器不是一個合適的方法,因爲如果我在tableA上有一個觸發器並且在tableB中刪除了一行,並且如果我有一個觸發器aon tableB用於更新tableA, – Shafizadeh 2015-09-18 21:05:16

-2
CREATE TABLE doc (
docID INTEGER NOT NULL AUTO_INCREMENT, 
langCode CHAR(2) NOT NULL, 
title VARCHAR(32), 
PRIMARY KEY (docID, langCode) 
) Type=InnoDB; 

CREATE TABLE author (
authorID INTEGER NOT NULL AUTO_INCREMENT, 
docID CHAR(2) NOT NULL, 
name VARCHAR(32), 
PRIMARY KEY (authorID), 
FOREIGN KEY (docID) REFERENCES doc(docID) ON DELETE CASCADE ON UPDATE CASCADE 
) Type=InnoDB; 
+1

這是http://dev.mysql.com/doc/refman/5.7/en/innodb-foreign-key-constraints.html的評論的直接副本。 – hichris123 2016-05-03 23:31:05

+1

這似乎沒有試圖回答日一切問題。 – Pang 2016-10-31 06:10:36

1

讓我分享如何我已經從第一天開始,我發現它的存在「修復」這個問題。我將級聯表中的觸發器複製到直接刪除的第一個表中。它只是工作。

很多時候這是複製/粘貼的問題,偶爾它需要大量重寫代碼。

最好的部分是,當Oracle最終修復此問題時錯誤您只能從上述表中刪除觸發器代碼。瞧!