Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 为什么在使用复合语句创建事件时发生此错误?_Mysql_Mysql Event - Fatal编程技术网

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.