我正在使用MySQL。我在A
表上有一条记录,其中包含一个软删除列:active
,其值为0
。
此行链接到11个表。所有人都有相同的active
列。
我需要确保A
上的记录仅在 11个表中的所有引用都有active = 0
时才会被删除。
我知道我可以用这些查询写一个视图,以便我可以删除"或不。但这是一个例子,IMO不是很实用的解决方案。级联更新无法正常工作,因为如果任何一个孩子仍处于活动状态,我无法删除父行。
谢谢!
答案 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;