在软删除之前检查MySQL

时间:2015-04-27 19:25:36

标签: mysql foreign-keys constraints soft-delete

我正在使用MySQL。我在A表上有一条记录,其中包含一个软删除列:active,其值为0

此行链接到11个表。所有人都有相同的active列。

我需要确保A上的记录仅在 11个表中的所有引用都有active = 0时才会被删除

我知道我可以用这些查询写一个视图,以便我可以删除"或不。但这是一个例子,IMO不是很实用的解决方案。级联更新无法正常工作,因为如果任何一个孩子仍处于活动状态,我无法删除父行。

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您按照自己的意愿创建active_view,这应该可行。只需将所有相关表的活动标志添加到foreign_active列中,您就应该好了。

CREATE TRIGGER before_update_student
 BEFORE UPDATE ON student  FOR EACH ROW
 BEGIN
      IF NEW.active = 0 AND (SELECT foreign_active FROM active_view
           WHERE id = NEW.id) > 0
      THEN
           SIGNAL SQLSTATE '45000'
                SET MESSAGE_TEXT = 'Cannot delete student when active roles exist.';
      END IF;
 END;