mysql - #1064 - 您的 SQL 语法有误; , SAMP MYSQL 错误

标签 mysql sql phpmyadmin

我在 PHPMyAdmin 上遇到这个错误

    #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

[编辑] 对不起,我之前没有放完整的东西,我已经有了 BEGIN 和 END,看。

CREATE TRIGGER `accounts_insert` BEFORE INSERT ON `accounts`
FOR EACH ROW BEGIN
SET new.RegiDate = now();
SET new.UpdateDate = now();
END;

这是一行^^

最佳答案

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

create trigger `accounts_insert` before insert on `accounts`
for each row
    set new.RegiDate = now();

如果您的触发器有多个指令,那么您需要:

  1. 更改默认分隔符
  2. 将触发指令包含在 begin...end block 中
  3. 恢复默认分隔符

例子:

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 ; 很重要?

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

delimiter $$

现在,每条指令必须以 $$ 结尾才能执行。定义你的触发器,当你想结束定义时,使用你新的临时指令终止符$$,然后重新定义终止符为正常的;:

delimiter ;

每次定义多指令触发器或存储过程或函数时,必须完成此操作。

关于mysql - #1064 - 您的 SQL 语法有误; , SAMP MYSQL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21947476/

相关文章:

sql - MySQL:查询缓存(如何使用内存缓存?)

mysql - 优化 SQL 以获取行数

php - 如何从数据库中列出不同的所有产品

php - 你能选择并加入一个mysql查询吗?

php - 从 NOW() 函数获取相对日期

mysql - 如何使用带有双向实体的 RestFul Web 服务正确编写 Json?

javascript - 有没有办法使用 javascript 变量作为 PHP SQL 页面的一部分?

php - Fusionchart : Some String Chracters Not Display In Fusion Pie Chart

php - mySQL 查询不适用于 PHP,但适用于 PHPMyAdmin

mysql - 我怎样才能在我的sql中使用mysql变量?