2011-02-17 128 views
1

我们有几个带外键的表。我检查了他们的CREATE语句,并且没有在任何地方启用“ON DELETE CASCADE”选项。MySQL - 删除级联

我想知道是否可以通过在Parent的DELETION行中提供一些命令来删除Parent以及Child中的所有相关行。

可能吗?

回答

0

如果在表上没有ON DELETE CASCADE,可以尝试使用AFTER DELETE触发器来实现它。

否则,可以轻松定义ON DELETE CASCADE。但是,请小心,特别是如果子表有多个约束。

0

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; 
+0

感谢您的回复。对不起,如果不明确。实际上,这个'ON DELETE CASCADE'在创建表格时没有使用。通过添加删除查询,我是否有机会以某种方式使用级联选项? – Firefox 2011-02-17 04:16:42