我有下表:
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
我希望删除父级时,其所有子级也将被删除。我该怎么办?
答案 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。