2012-12-04 236 views

回答

1

trigger documentation

觸發不能使用顯式或隱式開始或結束交易,如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 重讀你的問題,更新失敗條件

+0

你能如何做詳細說明失敗的條件?我嘗試使用DISTINCT,但它不讓我。 –

+0

增加了一個具體的例子 –

+0

在LIMIT 1之前你有table1,那是指什麼? –