mysql - 困境: Cascade delete or Join delete

标签 mysql sql rdbms data-integrity

这不是一个具体的问题,更像是一个普遍的疑惑。

当您必须对 1:M 关系中的多个表进行删除时,使用级联删除进行 FK 约束还是在删除语句中连接表更好。

我有一个旧项目,对相关表有单独的删除语句,有几次有些语句没有执行,数据完整性受到损害。我必须在两者之间做出决定,所以我在考虑什么是更好的解决方案。

还有一个选项可以创建存储过程或事务。

所以我正在寻求意见或建议...?

最佳答案

我会说使用级联删除更安全。如果您决定使用联接,则必须记住每次从父表中删除任何内容时都使用它们;即使你有足够的纪律来做到这一点,你也无法确定你的同事或将来会支持你的软件的人。此外,不止一次对有关表关系的知识进行编码违反了 DRY 原则。

如果您使用级联删除,则没有人需要记住任何内容,子行将始终根据需要删除。

关于mysql - 困境: Cascade delete or Join delete,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7821440/

相关文章:

mysql - Laravel/MySQL : Increment StoreOrderNumber based on StoreGuid

mysql - 外连接与搜索以及分组依据相结合的问题

mysql - 删除具有关联 "time_worked"记录的 SQL 结果

MYSQL从不同行选择2个具有相同值的不同字段

java - 如何在 Hibernate 上允许重复实体?

database - 在给定子集的集合中查找最接近完成字符串

mysql - 用于查找距中心点具有特定距离的所有点的 MySQL 地理查询中使用的测量单位是什么?

algorithm - 关系数据库与图数据库的转换

android - Android中从数据库填充ListView

mysql - 在 MySQL 中,我可以将 id FK 与另一个表中的 varchar 进行比较吗