我对如何实现ON CASCADE DELETE感兴趣,因为我想对这个操作的性能有一些想象。
假设我有3个表:父,子(引用父项的FK是ON DELETE CASCADE),孙子(引用子项的FK是ON DELETE CASCADE)。
现在我想删除父表中的一行以及子表和孙表中的所有相应条目
我想知道ON DELETE CASCADE“构造”哪些查询来执行此操作
它是否像以下那样?
self.collectionView!.reloadData()
然后,对于SELECT查询的每个返回结果,执行以下查询:SELECT child.id FROM child WHERE child.parent_id = 'parent_id';
?然后可以删除子表中具有id = child_id的行。重复此操作,直到删除DELETE FROM grandchild WHERE grandchild.child_id = 'child_id'
查询返回的所有子项。最后可以删除父母
我想它也可以使用表上的一些连接来实现,但是外键约束可能会失败。
答案 0 :(得分:0)
是的,你的例子就是一样的东西。
有关您的查询的更多信息。你可以做这样的事情
EXPLAIN DELETE FROM table1 where id = 1;
显示发生的事情。
正如您在explain
命令中看到的那样,我还在删除子记录时调用索引。