gpt4 book ai didi

'' 附近的 MySQL 语法错误

转载 作者:行者123 更新时间:2023-11-29 13:08:00 25 4
gpt4 key购买 nike

与 MySQL 相比,我更习惯 T-SQL,而且似乎存在一些我不太明白的语法问题。我收到一条错误消息,这对我来说似乎毫无意义,如果有人能告诉我我在这里做错了什么,我将非常感激。我是否可能不允许在更新触发器中进行更新?

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

我的代码是:

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 错误 (1064):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解第 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 ;

关于 '' 附近的 MySQL 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22447292/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com