Mysql 为什么在使用复合语句创建事件时发生此错误?
从这个意义上说。我被分隔符弄糊涂了。我还尝试了以下方法:Mysql 为什么在使用复合语句创建事件时发生此错误?,mysql,mysql-event,Mysql,Mysql Event,从这个意义上说。我被分隔符弄糊涂了。我还尝试了以下方法: CREATE EVENT test ON SCHEDULE EVERY 2 MINUTE DO BEGIN SELECT 1; SELECT 2; END DELIMITER $$ CREATE EVENT test ON SCHEDULE EVERY 2 MINUTE DO BEGIN SELECT 1; SELECT 2; END $$ DELIMITER; 这让我犯了上述问题: 错误代码:1064 您的SQL语法有错误;请查看与
CREATE EVENT test
ON SCHEDULE EVERY 2 MINUTE
DO
BEGIN
SELECT 1;
SELECT 2;
END
DELIMITER $$
CREATE EVENT test
ON SCHEDULE EVERY 2 MINUTE
DO
BEGIN
SELECT 1;
SELECT 2;
END $$
DELIMITER;
这让我犯了上述问题:
错误代码:1064
您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以获取第5行“”附近要使用的正确语法
如果我运行以下sql语句:
CREATE EVENT test
ON SCHEDULE EVERY 2 MINUTE
DO
BEGIN
SELECT 1;
SELECT 2;
END
DELIMITER $$
CREATE EVENT test
ON SCHEDULE EVERY 2 MINUTE
DO
BEGIN
SELECT 1;
SELECT 2;
END $$
DELIMITER;
这起作用并成功创建了一个新的事件
这两个sql之间唯一的区别是最后一个使用的分隔符
,所以我的问题是分隔符
为什么在这里工作。谁能给我解释一下吗
任何帮助都会事先得到感激和感谢。这确实微不足道,但很难解释
开箱即用的分隔符是代码>。。。这就是mysql知道语句结束的原因。但是像存储过程、事件、函数这样的东西都有很多语句。它需要一个外包装,才能知道它从哪里开始,在哪里结束
因此,您将开始时的分隔符重置为奇怪的值,如$$
,将该$$
放在结束后,然后重置回出厂设置,可以说是代码>
如果没有用于创建存储过程、事件、函数和触发器的错误1064,您将一直遇到错误1064。您将花费大量时间来寻找不存在的语法错误。嗯,经常。实际上,它缺少分隔符
包装器。这确实微不足道,但很难解释
开箱即用的分隔符是代码>。。。这就是mysql知道语句结束的原因。但是像存储过程、事件、函数这样的东西都有很多语句。它需要一个外包装,才能知道它从哪里开始,在哪里结束
因此,您将开始时的分隔符重置为奇怪的值,如$$
,将该$$
放在结束后,然后重置回出厂设置,可以说是代码>
如果没有用于创建存储过程、事件、函数和触发器的错误1064,您将一直遇到错误1064。您将花费大量时间来寻找不存在的语法错误。嗯,经常。实际上,它缺少分隔符。你的答案在这里的文档中
如果使用mysql
客户机程序定义包含分号字符的存储程序,则会出现问题。默认情况下,mysql
本身将分号识别为语句分隔符,因此必须临时重新定义分隔符,以使mysql
将整个存储程序定义传递给服务器
你的答案在这里的文件里
如果使用mysql
客户机程序定义包含分号字符的存储程序,则会出现问题。默认情况下,mysql
本身将分号识别为语句分隔符,因此必须临时重新定义分隔符,以使mysql
将整个存储程序定义传递给服务器
多谢各位@谢谢你@我可以帮助的DrewGlad:)感觉像是一个琐碎的编辑,不是学究式的,我发誓:)但我在这里引用了原始版本中出现的mysql
,试图帮助澄清它在每种情况下都指向客户机实用程序。常见的误解是,分隔符
被发送到服务器,但实际上它只是一个客户机指令+1我可以帮助的lad:)感觉像是一个琐碎的编辑,不是学究,我发誓:)但我在这里引用了原始版本中出现的mysql
,试图帮助澄清它在每种情况下都指向客户机实用程序。常见的误解是,分隔符
被发送到服务器,但实际上它只是一个客户机指令+1.