繁体   English   中英

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

[英]MYSQL Trigger Not Working. Not sure why

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

您的逻辑是倒退。 您需要在2000之前针对4000测试:

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”听起来很有趣。

我认为您需要ELSEIF而不是ELSE IF (删除空间。)

返回错误是因为第二个IF没有以END IF结尾。

另外,您实际上并不想针对同一表发出UPDATE。 您希望在BEFORE UPDATE触发器中处理此问题,并设置列的值。

例如

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM