用于插入和删除的MySQL事件调度程序语法

时间:2014-04-29 03:18:51

标签: mysql syntax-error scheduler

我想知道你是否可以告诉我ff sql语句有什么问题:

insert into translog 
  select * from transponder_logs where trans_log_id < 150000;
delete from transponder_logs where trans_log_id < 150000

这个语句在sql中运行得很好,但是当我在event scheduler上使用它时,它会给我一个语法错误。

错误消息是:

  

“您的SQL语法中有错误;请查看与您的mysql服务器版本对应的手册,以便在第3行'delete from transponder_logs where trans_log_id < 150000附近使用正确的语法”

1 个答案:

答案 0 :(得分:0)

每当您定义具有多个可执行语句的例程之类的代码时,必须定义自定义DELIMITER。并且您的代码将与分隔符指令一起发送到服务器。服务器在找到新定义的自定义分隔符之前将代码编译为

阅读文档说:
Defining Stored Programs

  

如果使用mysql客户端程序定义包含分号字符的存储程序,则会出现问题。默认情况下,mysql本身将分号识别为语句分隔符,因此必须临时重新定义分隔符以使mysql将整个存储的程序定义传递给服务器。

     

要重新定义mysql分隔符,请使用delimiter命令。 ....分隔符更改为//以使整个定义作为单个语句传递给服务器,然后还原到;在调用该过程之前。这使得;在过程体中使用的分隔符将被传递给服务器,而不是由mysql本身解释。

我相信您的事件调度程序代码只是按原样执行而不定义此类delimiter

将其更改为:

-- set the new delimiter
DELIMITER //

-- include your event scheduler code block here

-- lastly terminate the code block, with new delimiter
-- so that server starts compiling the code

//

-- now reset the delimiter to default
DELIMITER ;

请参阅CREATE EVENT Syntax