我正在尝试为名为quailmiles的表创建一个触发器。当总里程达到某个数字时,我希望人员状态(这是同一个表中的属性)发生变化。出于某种原因,我的代码无效。
目前的错误是:
#1064 - 您的SQL语法出错;检查与您的MySQL服务器版本对应的手册,以便在第9行的''附近使用正确的语法。
delimiter $$
CREATE TRIGGER status_update
AFTER UPDATE ON quailmiles
FOR EACH ROW BEGIN
IF (total_miles > 2000) THEN
UPDATE quailmiles SET status = 'gold';
ELSE IF (total_miles > 4000) THEN
UPDATE quailmiles SET status = 'platinum';
END IF;
END $$
delimiter;
答案 0 :(得分:2)
你的逻辑是倒退的。您需要在4000
之前对2000
进行测试:
delimiter $$
CREATE TRIGGER status_update
BEFORE UPDATE ON qualmiles
FOR EACH ROW
BEGIN
IF (NEW.total_miles > 4000) THEN
SET NEW.status = 'platinum';
ELSEIF (NEW.total_miles > 2000) THEN
SET NEW.status = 'gold';
END IF;
END $$
delimiter;
我还将语法更改为"之前"更新触发器。另外,我的名字是" qualmiles"。 " Quailmiles"听起来很有趣。
答案 1 :(得分:0)
我认为您需要 ELSEIF
而不是 ELSE IF
。 (删除空格。)
正在返回错误,因为第二个IF
并未以END IF
结束。
另外,您并不想真正针对同一个表发布UPDATE。您可以在BEFORE UPDATE触发器中处理它,并设置列的值。
e.g。
CREATE TRIGGER status_update
BEFORE UPDATE ON quailmiles
FOR EACH ROW
BEGIN
IF (NEW.total_miles > 4000) THEN
SET NEW.status = 'platinum';
ELSIF (NEW.total_miles > 2000) THEN
SET NEW.status = 'gold';
END IF;
END$$