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;
我正在使用 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;