gpt4 book ai didi

mysql - parentID和childID同表时如何删除级联?

转载 作者:行者123 更新时间:2023-11-29 02:21:31 26 4
gpt4 key购买 nike

我有一个名为 members 的 mysql 表,它基本上有两列:parentIDchildID。这样我就可以基于这两列创建一个层次结构树,例如:

parentID, ChildID
1,2
2,3
3,4

将在我的应用程序中生成一棵树,其中 parentID = 1 作为根,2 作为第一个节点,3 作为第二个节点,4 作为第三个节点等等。

在这种情况下,如果我想从给定的 parentID 中删除所有节点,我该如何完成?

最佳答案

您只需确保已设置从子行到其父行的外键,并在外键上设置了 ON DELETE CASCASDE 选项。这对自引用表和单独表中的引用同样有效。要删除树,只需删除父节点即可。将立即删除所有子行。

例如鉴于:

CREATE TABLE MyTable
(
ID INT NOT NULL PRIMARY KEY,
ParentID INT NULL,
CONSTRAINT FK_MT_Parent FOREIGN KEY (ParentID) REFERENCES MyTable(ID) ON DELETE CASCADE
);

-- And inserting two trees of data:
-- 1-2-3
-- └-4
-- 10 - 11
INSERT INTO MyTable(ID,ParentID) VALUES
(1,null), (2,1), (3,2), (4,2),
(10,null), (11,10);

我们可以通过简单地删除根节点来删除整个第一棵树:

DELETE FROM MYTable WHERE ID = 1;

SqlFiddle of same

但是请注意,来自 Docs CASCADE 删除的深度是有限制的:

Cascading operations may not be nested more than 15 levels deep

关于mysql - parentID和childID同表时如何删除级联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30973033/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com