MySQL 软删除前检查

MySQL check before soft delete

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

此行链接到 11 table。都具有相同的 active 列。

我需要确保删除 A 上的记录 仅当 11 个 table 中的所有引用都具有 active = 0 还有。

我知道我可以用这些查询编写一个视图来了解我是否可以 "deleted"。但这是一个例子,IMO 不是很实用的解决方案。级联更新也不起作用,因为如果任何子项仍处于活动状态,我无法删除父行。

谢谢!

如果您像您所说的那样创建 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;