我正在做一个触发器,当我更新表时,同一个表更新了一个字段。 触发器是:
CREATE TRIGGER update_user
AFTER UPDATE
ON users
FOR EACH ROW
BEGIN
IF (NEW.totalPoints > 0 AND NEW.totalPoints < 200)
THEN
updateUser("rank 1", NEW.ID);
ELSEIF (NEW.totalPoints > 200 AND NEW.totalPoints < 400)
THEN
updateUser("rank 2", NEW.ID);
END IF;
END;
,程序是:
CREATE PROCEDURE updateUser(newRank VARCHAR(100), IDUser INT)
BEGIN
UPDATE users SET rank = newRank WHERE ID = IDUser;
END;
我遇到的错误是创建程序时:
1064 - 您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在第3行的''附近使用正确的语法
感谢您的帮助!!
答案 0 :(得分:0)
使用BEFORE
更新触发器。但是,您无法真正将此过程用于此目的:
CREATE TRIGGER update_user BEFORE UPDATE ON users
FOR EACH ROW
BEGIN
IF (NEW.totalPoints > 0 AND NEW.totalPoints < 200)
THEN
SET NEW.rank = 'rank 1';
ELSEIF (NEW.totalPoints > 200 AND NEW.totalPoints < 400)
THEN
SET NEW.rank = 'rank 2';
END IF;
END;
修改数据的存储过程将难以在触发器中使用。
编辑:
如果您将其表达为:
SET NEW.RANK = (CASE WHEN NEW.totalPoints > 0 AND NEW.totalPoints < 200
THEN 'rank 1'
WHEN NEW.totalPoints > 200 AND NEW.totalPoints < 400
THEN 'rank 2'
ELSE NEW.RANK
END);
根本没有IF
逻辑。
答案 1 :(得分:0)
让我们尝试使用分隔符
-C