gpt4 book ai didi

mysql - '' mysql中单引号语法错误,但查询中没有单引号

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

以下查询:

CREATE TRIGGER `Update_staff_contract_contract_document_last_changed` BEFORE UPDATE ON `staff_contract`
FOR EACH ROW BEGIN
IF (new.Contract_document != old.Contract_document) THEN
SET new.Contract_document_last_changed = UTC_TIMESTAMP();
END IF;
END;

失败并出现此错误 您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在第 4 行的“”附近使用的正确语法

但是查询中没有单引号。如果我删除 begin/end 和 if/else 语法,它会起作用,例如

CREATE TRIGGER `Update_staff_contract_contract_document_last_changed` BEFORE UPDATE ON `staff_contract`
FOR EACH ROW
SET new.Contract_document_last_changed = UTC_TIMESTAMP();

它一定与开始/结束或 if/else 有关,但我不知道是什么,知道吗?

最佳答案

引自 dev.mysql.com

通过使用 BEGIN ... END 结构,您可以定义一个执行多条语句的触发器。在 BEGIN block 中,您还可以使用存储例程中允许的其他语法,例如条件和循环。但是,和存储例程一样,如果使用mysql程序定义一个执行多条语句的触发器,则需要重新定义mysql语句分隔符,这样才能使用;触发器定义中的语句分隔符。下面的例子说明了这些要点。它定义了一个 UPDATE 触发器,检查用于更新每一行的新值,并将该值修改为在 0 到 100 的范围内。这必须是一个 BEFORE 触发器,因为在使用该值更新之前必须检查该值行

问题是您正在使用多个语句,您应该使用语句分隔符分隔它们,默认情况下是 ; 字符。

编辑一些额外的细节:

默认定界符和触发器主体中使用的定界符相同,MySQL 认为 CREATE TRIGGER 语句在第一个 ; 字符处结束。在这种情况下,这意味着存在语法错误(因为 BEGIN..END block 并且触发器未完成)。

错误信息中的''表示,有一个空语句,不是单引号或双引号。

您必须更改分隔符才能成功创建触发器:

DELIMITER //

CREATE TRIGGER `Update_staff_contract_contract_document_last_changed` BEFORE UPDATE ON `staff_contract`
FOR EACH ROW BEGIN
IF (new.Contract_document != old.Contract_document) THEN
SET new.Contract_document_last_changed = UTC_TIMESTAMP();
END IF;
END//

DELIMITER ;

关于mysql - '' mysql中单引号语法错误,但查询中没有单引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24284462/

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