更新前mysql触发错误

时间:2013-12-04 16:34:50

标签: mysql

我遇到了无法解决的触发器问题。当我在Navicat中触发时没有错误,但是当我更新另一个数据库时,我收到了一个错误。触发器是:

CREATE TRIGGER `status` BEFORE UPDATE ON `db_termine` FOR EACH ROW 
IF (    (NEW.tgebucht >= OLD.tteilnmax) 
    AND (NEW.tgebucht!=0) 
    AND (OLD.tstatus=0)  ) THEN

    SET NEW.tstatus = 1;

ELSEIF (    (NEW.tgebucht < OLD.tteilnmax) 
        AND (OLD.tstatus=1) ) THEN

    SET NEW.tstatus =0;

END IF;

错误是:

架构创建失败:您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在第2行的''附近使用正确的语法:

这是第一条SET线。任何帮助都会受到赞赏,因为我现在正试图解决它而失去理智。

2 个答案:

答案 0 :(得分:0)

这很可能是因为您没有设置与;不同的分隔符,使查询在它看到的第一个;之后结束。

试试这个:

DELIMITER //
CREATE TRIGGER `status` BEFORE UPDATE ON `db_termine` FOR EACH ROW 
IF ((NEW.tgebucht >= OLD.tteilnmax) AND (NEW.tgebucht!=0) AND (OLD.tstatus=0)) THEN
    SET NEW.tstatus = 1;
ELSEIF ((NEW.tgebucht < OLD.tteilnmax) AND (OLD.tstatus=1)) THEN
    SET NEW.tstatus =0;
END IF;
//
DELIMITER ;

sqlfiddle demo

答案 1 :(得分:0)

您错过了begin/end语句

CREATE TRIGGER `status` BEFORE UPDATE ON `db_termine` FOR EACH ROW 
  Begin
    IF (    (NEW.tgebucht >= OLD.tteilnmax) 
        AND (NEW.tgebucht!=0) 
        AND (OLD.tstatus=0)  ) THEN

        SET NEW.tstatus = 1;

    ELSEIF (    (NEW.tgebucht < OLD.tteilnmax) 
            AND (OLD.tstatus=1) ) THEN

        SET NEW.tstatus =0;

    END IF;
  End;