我有以下MySQL查询来创建触发器:
CREATE TRIGGER `updateParentLastInteractionOnInsert`
AFTER INSERT
ON `Post` FOR EACH ROW
BEGIN
UPDATE `Post` SET `lastInteraction` = CURRENT_TIMESTAMP WHERE `id` = new.`parentPostId`;
END;
执行查询时,出现以下错误消息:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 5
由于这实际上没有任何意义,所以我做了自己的研究:
当我删除触发器主体中的所有内容(“ BEGIN”和“ END”之间的语句时,查询将成功处理并创建一个空触发器。
因此,我通过使用类似的语法运行以下查询来测试内部语句:
UPDATE `Post` SET `lastInteraction` = CURRENT_TIMESTAMP WHERE `Post`.`id` = 1
也已成功执行。
我不知道这是怎么回事。如果触发器和内部语句在语法和逻辑上都是正确的,那么顶级查询在语法上又如何呢?也许更新语句与触发器不兼容?我查看了MySql的文档以及整个网络,但找不到任何相关信息。
我的查询出了什么问题?
@@ BillKarwin的评论有答案。
此作品:
DELIMITER //
CREATE TRIGGER `updateParentLastInteractionOnInsert`
AFTER INSERT
ON `Post` FOR EACH ROW
BEGIN
UPDATE `Post` SET `lastInteraction` = CURRENT_TIMESTAMP WHERE `id` = new.`parentPostId`;
END //