我想知道你是否可以告诉我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
附近使用正确的语法”
答案 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 ;