使用InnoDB在MySQL 5.5.9上運行。MySQL觸發語法錯誤
我創建了以下觸發:
CREATE TRIGGER TRIGGER_Products_Insert
AFTER INSERT ON Products
FOR EACH ROW
BEGIN
UPDATE Products
SET current = 0
WHERE id = new.id
AND current = 1
AND autonumber <> new.autonumber
END;
MySQLWorkbench顯示在最後一行語法錯誤,並執行,這將引發以下錯誤
錯誤代碼:1064你有一個錯誤你的SQL語法;請檢查與您的MySQL服務器版本對應的手冊,以便在第11行'END'附近使用正確的語法。
我的錯誤在哪裏?
這個工作,但我不知道爲什麼'DELIMITER'的東西是必要的。 – 2012-02-10 11:31:03
因爲'BEGIN ... END'是觸發器的「主體」。所以,它必須是當前查詢的一部分。 ';'默認情況下是一個分隔符,所以當MySQL到達它時,它認爲這是查詢的結束並且不能解析它。此外,您必須將定界符放在觸發器的「正文」中,因爲它會以其他方式失效。所以,爲了滿足這個要求,我們需要在觸發器的「主體」中使用兩個不同的定界符,並在查詢中使用它自己。對不起,我的英文太難描述這個不太明顯的東西了... – Timur 2012-02-10 11:37:53
這裏比較好描述:http://dev.mysql.com/doc/refman/5.5/en/begin-end.html(第三段,以「使用多個語句要求客戶端能夠」開頭) – Timur 2012-02-10 11:42:39