我們有幾個帶外鍵的表。我檢查了他們的CREATE語句,並且沒有在任何地方啓用「ON DELETE CASCADE」選項。MySQL - 刪除級聯
我想知道是否可以通過在Parent的DELETION行中提供一些命令來刪除Parent以及Child中的所有相關行。
可能嗎?
我們有幾個帶外鍵的表。我檢查了他們的CREATE語句,並且沒有在任何地方啓用「ON DELETE CASCADE」選項。MySQL - 刪除級聯
我想知道是否可以通過在Parent的DELETION行中提供一些命令來刪除Parent以及Child中的所有相關行。
可能嗎?
如果在表上沒有ON DELETE CASCADE,可以嘗試使用AFTER DELETE觸發器來實現它。
否則,可以輕鬆定義ON DELETE CASCADE。但是,請小心,特別是如果子表有多個約束。
It is a valid option,下面的代碼按預期工作。
DROP TABLE IF EXISTS TestFoo;
CREATE TABLE TestFoo
(
Foo INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(Foo)
) ENGINE=InnoDB;
DROP TABLE IF EXISTS TestBar;
CREATE TABLE TestBar
(
Bar INT NOT NULL AUTO_INCREMENT,
Foo INT,
PRIMARY KEY(Bar),
FOREIGN KEY bar_foo (Foo)
REFERENCES TestFoo (Foo)
ON DELETE CASCADE
) ENGINE=InnoDB;
INSERT TestFoo VALUES (NULL),(NULL),(NULL),(NULL);
INSERT TestBar(Foo) VALUES (1),(2),(3),(4);
SELECT * FROM TestBar;
DELETE FROM TestFoo WHERE Foo = 2 OR Foo = 3;
SELECT * FROM TestBar;
感謝您的回覆。對不起,如果不明確。實際上,這個'ON DELETE CASCADE'在創建表格時沒有使用。通過添加刪除查詢,我是否有機會以某種方式使用級聯選項? – Firefox 2011-02-17 04:16:42