首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“”mysql中的单引号语法错误,但查询中没有单引号

问“”mysql中的单引号语法错误,但查询中没有单引号
EN

Stack Overflow用户
提问于 2014-06-18 11:34:09
回答 1查看 1.9K关注 0票数 1

以下查询:

代码语言:javascript
复制
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;

此错误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 4失败。

但是,查询中没有单引号。如果我删除了begin/end和if/else语法,它就能工作。

代码语言:javascript
复制
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();

这肯定与开始/结束有关,或者是否与之相关,但我不知道,有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-18 11:39:41

来自dev.mysql.com的报价

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

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

编辑一些额外的细节:

触发器正文中使用的默认分隔符和分隔符是相同的,MySQL认为CREATE TRIGGER语句以第一个;字符结尾。在本例中,这意味着存在语法错误(因为BEGIN..END块和触发器尚未完成)。

错误消息中的“”表示存在空语句,而不是单引号或双引号。

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

代码语言:javascript
复制
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 ;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24284462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档