0
我需要做一个触发器,防止员工删除。MySQL - 触发器,以防止通过连接表删除
我需要做一个触发器,防止员工删除。MySQL - 触发器,以防止通过连接表删除
触发不能使用显式或隐式开始或结束交易,如START TRANSACTION,COMMIT或ROLLBACK 陈述。
所以通常这是不可能的。 您可以做的是当您想要使整个交易失败时强制触发错误:例如
CREATE TRIGGER t1 BEFORE DELETE ON table1
FOR EACH ROW
BEGIN
IF (failCondition) THEN
SELECT 1/0 FROM table1 LIMIT 1
END IF;
END
这会引发错误和回滚整个事务
编辑:
因此,对于你的问题,这将是这样的
CREATE TRIGGER preventLastStaffDeletion BEFORE DELETE ON Admission
FOR EACH ROW
BEGIN
DECLARE remaining INT DEFAULT 0;
SET remaining := (SELECT COUNT(staff) FROM Admission WHERE the_date = OLD.the_date AND work_time = OLD.work_time);
IF remaining = 1 THEN
SELECT 1/0 FROM Admission LIMIT 1
END IF;
END
没考所以原谅语法错误,但这个想法应该清楚。
在此日期允许这种工作时间的员工删除,直到只有一个离开
EDIT 2 重读你的问题,更新失败条件
你能如何做详细说明失败的条件?我尝试使用DISTINCT,但它不让我。 –
增加了一个具体的例子 –
在LIMIT 1之前你有table1,那是指什么? –