2016-07-26 61 views
1

我想創建一個觸發器,在插入之前測試一個條件,如果滿足條件,則取消插入。插入MySQL測試,如果條件滿足則取消

我在包含if語句的手冊中遇到此代碼,但在文檔中未指定取消插入的方法。

CREATE TRIGGER upd_check BEFORE UPDATE ON account -> FOR EACH ROW -> BEGIN -> IF NEW.amount < 0 THEN -> SET NEW.amount = 0; -> ELSEIF NEW.amount > 100 THEN -> SET NEW.amount = 100; -> END IF; -> END;

+0

此觸發器用於'UPDATE'而不是'INSERT'。 – Blank

+0

我認爲阻止從MySQL的'INSERT'的唯一方法是拋出一個異常,這不是很好。有什麼方法可以阻止來自應用程序層的'INSERT'? –

回答

2

你必須使用一個signal

信號「重返」錯誤的方式。 SIGNAL向客戶端提供錯誤 信息給處理程序,應用程序的外部或 。此外,它還提供對錯誤 特徵(錯誤編號,SQLSTATE值,消息)的控制。

因此,你可以有

CREATE TRIGGER upd_check BEFORE UPDATE ON account 
    -> FOR EACH ROW 
    -> BEGIN 
    ->  IF NEW.amount < 0 THEN 
    ->   SET NEW.amount = 0; 
    ->  ELSEIF NEW.amount > 100 THEN 
    ->   SET NEW.amount = 100; 
      ELSE 
       SIGNAL SQLSTATE '01000' 
       SET MESSAGE_TEXT = 'Sorry cannot insert', MYSQL_ERRNO = 1000; 
    ->  END IF; 
    -> END; 

更新:您可能也想看看的error messages list和選擇更合適的錯誤號。