gpt4 book ai didi

mysql - 删除条目的所有后代 (MySQL)

转载 作者:行者123 更新时间:2023-11-29 14:19:55 25 4
gpt4 key购买 nike

我有一个表格,其中包含以下列:

姓名父姓名ID

我们还假设有三个条目的 Parent Name 为 Null(意味着它们是最顶层的父项) - F_one、G_one 和 H_one。

如果我想删除这些 parent 之一(G_one,为什么不?)的所有后代,这意味着 G_one 的所有 child ,这些 child 的所有 child ,以及那些 child 的 child ,依此类推,直到终端级别,其中该行的 Name 不作为任何其他条目的 Parent Name 存在。

这是否可以通过单个查询轻松完成?

额外的,有没有办法选择所有的 G_one 血统,这样我就可以按照自己的想法和意愿操纵它?

可以假设:- parent 之间没有共享 child

不能假设:-离散的甚至一致数量的子级别。

最佳答案

正如 @Marc B 的建议,使用 FORIEGN KEYON DELETE CASCADE 可以实现这一点。

如果您还没有,您可以立即添加:

  1. 如果NameUNIQUE约束(我假设PRIMARY键操作系统ID ), 跳过此步骤。如果没有,请创建它:

    ALTER TABLE tableX
    ADD CONSTRAINT unique_Name
    UNIQUE (Name) ;
  2. 如果上一步成功,请添加FOREIGN KEY:

    ALTER TABLE tableX
    ADD CONSTRAINT fk_Name_ParentName
    FOREIGN KEY (ParentName)
    REFERENCES tableX (Name)
    ON UPDATE CASCADE
    ON DELETE CASCADE ;
  3. 如果上一步成功,您现在可以使用一条语句删除行:

    DELETE
    FROM tableX
    WHERE ParentName = 'G_one' ;

    这应该导致:Y 行受影响

关于mysql - 删除条目的所有后代 (MySQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11917508/

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