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,那是指什麼? –