首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >#1064 -您的SQL语法中有错误;,SAMP MYSQL错误

问#1064 -您的SQL语法中有错误;,SAMP MYSQL错误
EN

Stack Overflow用户
提问于 2014-02-22 07:47:47
回答 1查看 609关注 0票数 1

我在我的PHPMyAdmin上看到这个错误

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

编辑对不起,我没有把整个东西放在前面,我已经有了一个开始和一个结束,看。

代码语言:javascript
复制
CREATE TRIGGER `accounts_insert` BEFORE INSERT ON `accounts`
FOR EACH ROW BEGIN
SET new.RegiDate = now();
SET new.UpdateDate = now();
END;

这是这行^^

EN

回答 1

Stack Overflow用户

发布于 2014-02-22 07:54:12

如果触发器只有一条指令,则不需要begin关键字:

代码语言:javascript
复制
create trigger `accounts_insert` before insert on `accounts`
for each row
    set new.RegiDate = now();

如果触发器有多条指令,则需要:

Change the default delimiter

  • Enclose
  1. instructions in a begin...end
  2. Restore delimiter
  3. Enclose default delimiter

(在数据块中更改触发器指令并恢复默认分隔符)

示例:

代码语言:javascript
复制
delimiter $$
create trigger `accounts_insert_2` before insert on `accounts`
for each row
begin
    set new.RegiDate = now();
    set @newRows = coalesce(@newRows, 0) + 1; -- Just a dummy example
end; &&
delimiter ;

为什么delimiter $$ delimiter ; 和delimiter ;很重要?

当您编写查询时,MySQL假定它在找到第一个标准“指令终止符”(;)的地方结束。由于您的触发器有多条指令,并且每条指令都必须以;结尾,因此MySQL假定触发器定义已经结束,(当然)无法执行它。那么,我们能做什么呢?只需在时间上重新定义标准指令终止符:

代码语言:javascript
复制
delimiter $$

现在,每条指令都必须以$$结尾才能执行。定义触发器,如果要结束定义,请使用新的临时指令终止符$$,然后将终止符重新定义为普通的;

代码语言:javascript
复制
delimiter ;

每次定义多结构触发器或存储过程或函数时,都必须执行此操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21947476

复制
相关文章

相似问题

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