内表级联删除

时间:2015-04-28 09:22:12

标签: php mysql sql

我有下表:

id     name     parent_id
1      node1    0
2      node2    1
3      node3    1
4      node4    2
5      node5    2
6      node6    5
.      .        .
.      .        .
.      .        .

它可以显示如下:

node1--->node2--->node4
     |        |
     |        --->node5--->node6
     |
     --->node3

我希望删除父级时,其所有子级也将被删除。我该怎么办?

1 个答案:

答案 0 :(得分:0)

您可以使用数据库功能“DELETE ON CASCADE”轻松完成此操作。 每当我们定义一个外键时,我们都可以选择启用删除级联,这样只要删除父行,就会自动删除引用的行。

create table Nodes(id int not null primary key AUTO_INCREMENT,
               name varchar(20),
               parent_id int null,
               constraint FK_ID_With_CascadeDelete
               foreign key (parent_id)
               REFERENCES Nodes(id)
               ON DELETE CASCADE);

请参阅以下链接以获取示例,显示删除Node2正在删除所有子项。

http://sqlfiddle.com/#!9/e1d43/1/0

注意:由于“Cascade上的删除”功能需要定义外键,因此在parent_id中,对于没有父节点的节点,需要使用“null”而不是0。