这个简单的MySQL触发器的语法有什么问题?

问题描述:

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

试着写了这样的查询:

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