我需要制作一个触发器来防止删除员工。
问问题
282 次
1 回答
1
从触发器文档:
触发器不能使用显式或隐式开始或结束事务的语句,例如 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
没有测试所以借口语法错误,但想法应该很清楚。
允许删除在此日期具有此工作时间的员工,直到只剩下一个
编辑 2 重新阅读您的问题并更新失败条件
于 2012-12-04T01:35:03.407 回答