2012-06-21 86 views
2

如何在MySQL中執行等價語句?我想要它,如果輸入是一個特定的值,不要插入該行。在SQL SERVER中,我只能說ROLLBACK。 MySQL中的等效命令是什麼?謝謝。MySQL限制插入

CREATE TRIGGER tr_some_trigger 
ON some_table 
FOR INSERT 
AS 
BEGIN 
    IF inserted.topic == 'test' THEN 
    ROLLBACK 
    ENDIF 
END 

回答

2

this document

觸發不能使用或明或暗地開始 或結束交易,如START TRANSACTION,COMMIT或ROLLBACK語句。

所以ROLLBACK不會觸發你的裏面工作,但如果觸發拋出一個異常/錯誤,它會阻止插入成功,所以你可以做的是,如果你的條件符合拋出一個異常(一個方法是調用一個未定義的函數)。

例如:

DELIMITER $$ 

CREATE 
    TRIGGER `db`.`before_insert` BEFORE INSERT 
    ON `db`.`dummy_table` 
    FOR EACH ROW BEGIN 
    IF new.topic = 'test' THEN 
     CALL func_1(); 
    END IF; 

    END$$ 

DELIMITER ; 

假設func_1不存在它會阻止你的新插入的記錄。

+0

這是唯一的方法嗎?僅僅調用一個不存在的函數來使它失敗是一個好習慣嗎?如果出於某種不幸的原因,某人創建了一個具有相同名稱的函數,觸發器將不再工作。 – Eric

+0

在mysql中沒有throw或raise關鍵字,所以這是其中一種方式,對於其他人來看這個線程http://stackoverflow.com/questions/465727/raise-error-within-mysql-function –

1

這是在MySQL回滾了。檢查文檔here