从此SO question。我对DELIMITER
感到困惑。我也尝试过以下内容:
CREATE EVENT test
ON SCHEDULE EVERY 2 MINUTE
DO
BEGIN
SELECT 1;
SELECT 2;
END
这让我误解了提到的问题:
错误代码:1064 您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以获得在''附近使用的正确语法。在第5行。
如果我在下面运行sql:
DELIMITER $$
CREATE EVENT test
ON SCHEDULE EVERY 2 MINUTE
DO
BEGIN
SELECT 1;
SELECT 2;
END $$
DELIMITER;
这有效并创建了一个新的EVENT
成功。
这两个sql之间的唯一区别是最后一个使用DELIMITER
,所以我的问题是为什么DELIMITER
在这里工作。有谁可以向我解释一下?
任何帮助都表示赞赏,并提前致谢。
答案 0 :(得分:2)
您的答案取决于此处的文档21.1 Defining Stored Programs
如果使用
DELIMITER
客户端程序定义包含分号字符的存储程序,则会出现问题。默认情况下,mysql
本身将分号识别为语句分隔符,因此您必须临时重新定义分隔符,以使mysql
将整个存储的程序定义传递给服务器。
答案 1 :(得分:1)
这是微不足道的,但很难解释。
开箱即用的分隔符是;
...这就是mysql知道语句结束的方式。但是存储过程,事件,函数之类的东西中有很多语句。它需要一个外包装,以便知道它的开始位置和结束位置。
因此,您将开头的分隔符重置为奇怪的内容,例如$$
,将$$
放在END
之后,然后重置回工厂,以便与{{{}}对话1}}
如果没有存储过程,事件,函数和触发器的创建,您将始终提出错误1064。并且你会花很多时间追逐你的尾巴寻找不存在的语法错误。好吧,经常。实际上它缺少;
包装器。