【问题标题】:ON CASCADE DELETE implementationON CASCADE DELETE 实施
【发布时间】:2015-12-31 16:25:18
【问题描述】:

我对如何实现 ON CASCADE DELETE 很感兴趣,因为我想对这个操作的性能有一些想象。
假设我有 3 个表:父、子(引用父级的 FK 是 ON DELETE CASCADE)、孙子(引用子级的 FK 是 ON DELETE CASCADE)。
现在我想删除父表中的一行以及子表和孙表中的所有相应条目。
我想知道 ON DELETE CASCADE “构造”了哪些查询来执行此操作。
是不是像下面这样?

SELECT child.id FROM child WHERE child.parent_id = 'parent_id'; 然后对于从 SELECT 查询返回的每个结果,执行以下查询:DELETE FROM grandchild WHERE grandchild.child_id = 'child_id' ?然后可以删除子表中id = child_id的行。重复此操作,直到 SELECT 查询返回的所有子项都被删除。终于可以删除父级了。
我想它也可以在表上使用一些连接来实现,但是外键约束可能会失败。

【问题讨论】:

    标签: mysql database foreign-keys


    【解决方案1】:

    是的,在您的示例中也是如此。 有关您的查询的更多信息。你可以做这样的事情 EXPLAIN DELETE FROM table1 where id = 1; 显示发生了什么。

    正如您在explain 命令中看到的,我在删除子记录时也会调用索引。

    【讨论】:

    • 感谢您的回答!那么从性能来看,应该和我描述的一样吧?您能否在此处引用一些文档,...,这将确认您的答案?那我马上接受你的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    • 2019-07-12
    • 2016-09-28
    • 1970-01-01
    相关资源
    最近更新 更多