mysql - ON CASCADE DELETE 实现

标签 mysql database foreign-keys

我对 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 返回所有子级。查询被删除。最后可以删除父级。
我想它也可以使用表上的一些连接来实现,但这样外键约束可能会失败。

最佳答案

是的,你的例子是一样的。 有关您的查询的更多信息。你可以做这样的事情 解释从 table1 中删除,其中 id = 1; 显示发生了什么。

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

关于mysql - ON CASCADE DELETE 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32924453/

相关文章:

php - 如何仅通过查询找到数据库 IP 在网络上的位置? (mysql)

PHP/MySQL更新数据库中一条消息记录的问题

java - 在多个主机上并行执行

mysql - MYSQL 中当前行上(和包括)日期之前的所有行的总和

sql-server - 短文本数据库键与数字键;什么时候比另一个更有效率?

php - 根据另一个表的匹配结果从一个表中选择行

mysql - 在 mysql innodb 全文搜索上添加 "dot/period"字符作为可搜索词

sql - 将 FK/约束添加到表的子部分

c# - 在 edmx 中生成的类中带有外键的表缺少成员

c# - 检查并比较 sql server 表中的列值