【发布时间】:2015-04-27 19:25:35
【问题描述】:
我正在使用 MySQL。我在A 表上有一个带有软删除列的记录:active,其值为0。
此行链接到 11 个表。都有相同的active 列。
我需要确保删除A 上的记录只有在 11 个表中的所有引用也都具有active = 0 时。
我知道我可以用这些查询编写一个视图来获取是否可以“删除”。但这是一个例子,IMO 不是很实用的解决方案。级联更新也不起作用,因为如果任何子行仍处于活动状态,我无法删除父行。
谢谢!
【问题讨论】:
-
你说:我需要确保
A上的记录被删除仅当 11 个表中的所有引用也都具有active = 0。删除是指硬删除还是软删除(set active = 0) -
这可能会变得一团糟,或许可以考虑使用 fk 来限制删除,这意味着您总是需要在删除父级之前删除子级。
-
@SteveMandl 是的。假设你有一个学生。如果他/她仍在课程中(Student_Courses 表上的活动 = 1),则无法删除(活动 = 0)。我需要为历史日志保留这两条记录。
-
@Augwa 谢谢,但如果不存在任何关系,该检查就可以了,但它不会检查我是否允许安全删除它。
标签: mysql foreign-keys constraints soft-delete