mysql中的DELIMITER不起作用

Posted

技术标签:

【中文标题】mysql中的DELIMITER不起作用【英文标题】:DELIMITER in mysql does not work 【发布时间】:2013-08-08 14:40:32 【问题描述】:

当我使用命令行 (mysql.exe) 执行时,以下代码可以正常工作,但当我在 phpmyadmin 中使用 SQL Query 或使用 ScriptRunner (Java) 执行时不正确。

错误:错误语法执行DELIMITER $$

我该如何解决这个问题?

-- Procedures
-- 
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `upload_photo`(
IN owner_id int, IN photo_name text, IN photo_url text, IN thumbnail text
)
begin
declare inserted_id int unsigned default 0;
INSERT INTO photo(`owner_id`, `photo_name`, `photo_url`, `thumbnail`) VALUES(owner_id, photo_name, photo_url, thumbnail);
 set inserted_id = last_insert_id();
 select * from photo where photo_id = inserted_id;
end$$

-- 
DELIMITER ;

【问题讨论】:

使用不同的分隔符,也许? @MikeW:感谢您的回复。但我得到了同样的错误。 :D this thread的可能重复 并非所有版本的 phpMyAdmin 都能识别分隔符命令;相反,可以使用 SQL 输入框下方的分隔符输入框。 See here 我个人并不了解 ScriptRunner,但我认为它也不知道 DELIMITER 关键字。但是你不能在Runscript之前用setDelimiter("$$", true)设置分隔符并省略DELIMITER关键字吗? 【参考方案1】:

PhpMyAdmin 使用不支持分隔符的 mysqli。看看是否需要分隔符。我正在运行一个包含多行的脚本,而我的 MySQL 以分号作为分隔符运行所有这些脚本。

【讨论】:

刚刚检查过。 MySQL 不需要分隔符。只需要传递查询。 mysqli->query 只发送一个查询(你需要 mysqli->multi_query)。因此,由于您只能传递一个查询,因此不需要分隔符,因为无论它有多少分号,它始终是一个查询。【参考方案2】:

我找到了一个解决方案 here,它对我有用(我正在使用 ScriptRunner):

只需使用-- @DELIMITER $$ 而不是DELIMITER $$

【讨论】:

【参考方案3】:

我刚刚遇到了一个类似的问题,即我的 DELIMITER 语句在通过 Flyway 运行时中断,尽管当我通过我的 sql 客户端运行它时它工作正常。

问题是缩进或隐藏的特殊字符,因为在 IDE 中格式化代码解决了问题。

【讨论】:

以上是关于mysql中的DELIMITER不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 mysql 中创建函数不起作用 - 错误 1064

UDF 触发器不起作用 MySQL ERROR 1064 (42000)

程序不起作用

为啥 mysql 中的 generationtype.sequence 不起作用?

MySQL 中的 CHECK 约束不起作用

我在 MySQL 中的视图不起作用