【发布时间】: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