簡體   English   中英

MySQL觸發器錯誤添加新記錄

[英]MySql trigger error with adding a new record

我剛剛學習了MySQL觸發器及其工作方式。 我決定將其應用在我的小型網站上。

我有一個Users表,用於在其中創建新用戶帳戶,並且我想保留在UsersHistory表中添加新帳戶的歷史記錄。

錯誤是當我執行以下查詢時,它給了我一個錯誤:

查詢:

CREATE TRIGGER User_After_Insert 
AFTER INSERT ON UsersHistory FOR EACH ROW WHEN NOT NEW.Deleted 
BEGIN                  
    SET @changeType = 'DELETE';  

    INSERT INTO UsersHistory (UserID, changeType) 
    VALUES (NEW.ID, @changeType);    
END;

CREATE TRIGGER User_After_Insert1 
AFTER INSERT ON UsersHistory FOR EACH ROW WHEN NEW.Deleted 
BEGIN              
    SET @changeType = 'NEW';  

    INSERT INTO UsersHistory (UserID, changeType) 
    VALUES (NEW.ID, @changeType);        
END;

錯誤是:

1064-您的SQL語法有誤; 請查看與您的MySQL服務器版本相對應的手冊,以獲取在'WHEN NOT NEW'附近使用正確的語法。
第1行的SET @changeType ='DELE'

我正在尋找解決方案,但找不到。

謝謝

您是否將DELIMITER設置為不同於“;”的內容? 另外,我看到了一些我不知道在mysql中受支持的東西(BEGIN塊之前的WHEN語句),所以這是我的建議:

delimiter //
CREATE TRIGGER User_After_Insert AFTER INSERT ON UsersHistory FOR EACH ROW
INSERT INTO UsersHistory (UserID, changeType) VALUES (NEW.ID, 'NEW')//
CREATE TRIGGER User_After_Delete AFTER DELETE ON UsersHistory FOR EACH ROW              
INSERT INTO UsersHistory (UserID, changeType) VALUES (OLD.ID, 'DELETE')//
delimiter ;

更新

由於您在下面的評論,我認為您需要進一步了解觸發器。 但這是要點。

上面的語句在實際數據庫中創建觸發器。 實際上,您在數據庫模式中“安裝”了觸發器。 如果您具有適當的帳戶權限,則在任何mysql客戶端中運行語句將創建觸發器。

現在,從此階段開始,您無需通過PHP或類似的方式顯式調用它們。 它們位於數據庫中,在您執行某些操作時會自動被調用。 在上述情況下,將記錄從UserHistory中刪除后或將記錄插入UserHistory中之后。

因此,當您從php腳本運行“ INSERT INTO UserHistory VALUES ...”時,數據庫將自動觸發觸發器。

希望有道理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM