MySQL - 关于删除级联

时间:2011-02-17 04:00:42

标签: mysql database

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

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

可能的?

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

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

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