这个简单的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
任何人都可以帮助我?提前致谢!
答
试着写了这样的查询:
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
列和变量名称是相同的 - 尝试将变量名称更改为sg else。 – Shadow