2012-09-23 76 views
0

我想設置一個觸發器,以便插入不會發生如果條件不滿足。Mysql防止插入不符合插入觸發條件

我以爲下面是做到這一點的方式,但我不知道

我得到一個錯誤 /* SQL錯誤1407:錯誤的SQLSTATE:「45000」 */

燦任何人都會讓我知道爲什麼我得到這個錯誤,以及如果在mysql中不符合條件時阻止插入的最佳方式。

DELIMITER $$ 
SHOW WARNINGS$$ 
USE `warrington_central`$$ 

CREATE TRIGGER before_insert_image_comment_section_check 
BEFORE INSERT ON image_comment FOR EACH ROW 
BEGIN 

DECLARE error_msg varchar(255); 
IF New.section != (SELECT id from section where section = "image") 
    THEN SET error_msg = "Cannot insert a comment into this section as it is the wrong section type"; 
    SIGNAL SQLSTATE '45000 'SET MESSAGE_TEXT = error_msg; 


END IF; 

END 
$$ 

SHOW WARNINGS$$ 

回答

4

SQLSTATE必須是5個字符的字符串,除非先前使用DECLARE ... CONDITION聲明;

SIGNAL SQLSTATE '45000 'SET MESSAGE_TEXT = error_msg; 

您試圖將SQLSTATE設置爲長度爲6個字符的'45000'(注意空格)。修復間隔,你不應該再看到消息(它也反映在您的錯誤信息,但空間有點難以看到)

+0

感謝什麼信號SQLSTATE'45000'SET MESSAGE_TEXT = error_msg;實際上,這會妨礙插入 - 只是在線閱讀它45000是什麼意思 –

+1

@MatthewChambers SIGNAL是從觸發器「返回」錯誤的方式,'45000'的意思是「未處理的用戶定義的異常」。這是錯誤代碼。 MESSAGE_TEXT是錯誤消息的可選明文版本。是的,它應該停止發生插入。 –