2016-10-16 18 views
0

我試圖執行一個非常基本的觸發我在MariaDB's Trigger examples發現語法錯誤在線3:REFERENCING OLD ROW ...。一般來說,我無法運行我爲MariaDB或MySQL找到的任何示例。那麼這裏有什麼問題?我讀了REFERENCING這一部分不是必須的,但如果沒有它,它也不會起作用。我所做的任何觸發器查詢都是SQL語法錯誤。這可能與使用DBeaver作爲SQL客戶端有關嗎?MariaDB的:在引用舊行

回答

1

我希望觸發到這個樣子:

DELIMITER $$ 

CREATE TRIGGER Books_Delete 
AFTER DELETE ON Books 
FOR EACH ROW 
BEGIN       /* See note (c) */ 
    INSERT INTO Books_Deleted_Log(title) 
     VALUES (Old.title); 
END;$$ 

DELIMITER ; 

REFERENCING不是MySQL的句法的一部分,但MariaDB的語法的一部分。

+0

根據MariaDB的官方wiki,他們使用'REFERENCING'語法。有沒有一些乾淨的方法來避免'DELIMITER'語法?對我來說,當我想要運行一個觸發器時,必須改變分隔符,這感覺很奇怪。這看起來是我失蹤的部分,所以我的查詢完全失敗。 – CodeShark

+1

@CodeShark。 。 。只要有代碼的「主體」,就需要使用'DELIMITER'。這是一個問題,因爲SQL定義了分號。分號結束語句(默認情況下),但觸發器,存儲過程或函數具有多個語句。 –

+0

注意,如果表和列不存在,觸發器將失敗。 –