2017-07-19 88 views
0
DELIMITER $$ 

CREATE TRIGGER ad_user AFTER DELETE 

ON `user` 
FOR EACH ROW BEGIN 
    DECLARE max_id INT; 
    DECLARE new_id INT; 

    SELECT MAX(`id`) INTO max_id FROM `user`; 
    IF max_id = NULL THEN 
     SET max_id = 0; 
    END IF 

    SELECT `new_id` INTO new_id FROM `conf` WHERE `table` = 'user'; 

    IF max_id < new_id THEN 
     UPDATE `conf` SET `new_id` = max_id WHERE `table` = 'user'; 
    END IF 
END$$ 

我得到了以下錯誤提示,當我創建這個觸發器:這個簡單的MySQL觸發器的語法有什麼問題?

錯誤代碼:1064你在你的SQL語法錯誤;檢查 手冊,該手冊對應於您的MySQL服務器版本的右邊 語法以在'SELECT new_id INTO new_id FROM conf WHERE table = 'fact''附近使用。 IF max_id < new_id THEN'at line 12

任何人都可以幫助我?提前致謝!

+0

列和變量名稱是相同的 - 嘗試將變量名稱更改爲sg else。 – Shadow

回答

3

試着寫了這樣的查詢:

DELIMITER $$ 

CREATE TRIGGER ad_user AFTER DELETE 
ON `user` 
FOR EACH ROW BEGIN 
    DECLARE v_max_id INT; 
    DECLARE v_new_id INT; 

    SELECT MAX(`id`) INTO v_max_id FROM `user`; 
    IF v_max_id IS NULL THEN 
     SET v_max_id = 0; 
    END IF; 

    SELECT `new_id` INTO v_new_id FROM `conf` WHERE `table` = 'user'; 

    IF v_max_id < v_new_id THEN 
     UPDATE conf c 
      SET c.new_id = v_max_id 
      WHERE c.`table` = 'user'; 
    END IF; 
END$$ 

這主要增加了分號和修復= NULL

+0

非常感謝您的回覆!是的,你準確地指出了這兩個錯誤。我的問題解決了。而且我會採用你的命名習慣,在局部變量之前加上'v_'。非常感謝你! – Benson