MYSQL触发器不起作用。不知道为什么

时间:2014-06-09 17:41:44

标签: php mysql sql triggers

我正在尝试为名为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;

2 个答案:

答案 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$$