我遇到了无法解决的触发器问题。当我在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线。任何帮助都会受到赞赏,因为我现在正试图解决它而失去理智。
答案 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 ;
答案 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;