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

时间:2014-02-21 23:47:47

标签: 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;

这是^^

1 个答案:

答案 0 :(得分:0)

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

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

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

  1. 更改默认分隔符
  2. 将触发器说明括在begin...end
  3. 恢复默认分隔符
  4. 示例:

    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 ;
    

    每次定义多个辅助触发器或存储过程或函数时,都必须