我感兴趣的是,ON级联删除是如何实现的,因为我想对此操作的性能有一些想象力。
假设我有3个表:父表、子表(FK引用父表在DELETE级联上)、孙子表(FK引用子表位于DELETE级联)。
现在,我要删除父表中的一行,以及子表和外孙表中的所有相应条目。
我想知道哪些查询是由DELETE级联“构造”来执行此操作的。
是像下面这样的吗?
然后,对于从SELECT查询返回的每个结果,执行以下查询:SELECT child.id FROM child WHERE child.parent_id = 'parent_id';?然后,可以删除带有id = child_id的子表中的行。重复此操作,直到删除SELECT查询返回的所有子级。最后,家长可以被删除。
我猜它也可以使用表上的一些联接来实现,但是外键约束可能会失败。
发布于 2015-10-03 16:06:14
是的,你的例子也是一样的。有关查询的更多信息。您可以做一些类似EXPLAIN DELETE FROM table1 where id = 1;的事情来显示发生了什么。
正如您在explain命令中看到的那样,我在删除子记录时也调用索引。
https://stackoverflow.com/questions/32924453
复制相似问题