繁体   English   中英

''附近的MySQL语法错误

[英]MySQL Syntax error near ''

与MySQL相比,我更习惯于T-SQL,似乎有些语法问题我只是不太了解。 我收到的错误消息对我来说似乎毫无意义,如果有人可以告诉我我在做什么错,我将不胜感激。 也许我不允许在UPDATE TRIGGER中执行UPDATE吗?

我的想法是,我只想跟踪我当前的德语日志是否已得到纠正,并根据我是否正在更新日志的一部分或我的导师正在更新其日志的部分来记录时间。

我的代码是:

DELIMITER //

CREATE TRIGGER updateTimes
AFTER UPDATE ON Logs
FOR EACH ROW

BEGIN

    IF (Old.TimGerman <> New.TimGerman OR
        Old.TimComment <> New.TimComment)
    THEN
            UPDATE Logs 
                SET DateUpdated = CURRENT_TIMESTAMP, Corrected = 0
                WHERE LogID = New.LogID;

    ELSE IF (Old.TutorGerman <> New.TutorGerman OR
                Old.TutorComment <> New.TutorComment)
    THEN
            UPDATE Logs
                SET DateMarked = CURRENT_TIMESTAMP, Corrected = 1
                WHERE LogID = New.LogID;
    END IF;
END //
DELIMITER ;

我的错误消息说:

SQL Error (1064): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax near '' at line 21.

第21行是从底部开始的第4行: WHERE LogID = New.LogID;

非常感谢您的帮助!

从语法上讲,除了ELSE IF部分以外,您的触发器是正确的。 如果要使用它,则需要一个额外的END IF 否则,将其修改为ELSEIF

而且似乎您需要一个BEFORE触发器,而不是AFTER触发器。
除此之外,在同一表的update触发器中调用显式update的意义较小,因为它会引起循环事件。 不支持该功能并引发错误。

如下更改触发器定义:

DELIMITER //

CREATE TRIGGER updateTimes BEFORE UPDATE ON Logs
FOR EACH ROW
BEGIN
    IF ( OLD.LogID = New.LogID ) THEN
         IF ( Old.TimGerman <> New.TimGerman OR
              Old.TimComment <> New.TimComment )
         THEN
             SET NEW.DateUpdated = CURRENT_TIMESTAMP, NEW.Corrected = 0;

         ELSEIF ( Old.TutorGerman <> New.TutorGerman OR
                  Old.TutorComment <> New.TutorComment )
         THEN
             SET NEW.DateMarked = CURRENT_TIMESTAMP, NEW.Corrected = 1;
         END IF;
     END IF;
END;
//

DELIMITER ;

暂无
暂无

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

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