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不起作用的主要内容,如果未能解决你的问题,请参考以下文章
UDF 触发器不起作用 MySQL ERROR 1064 (42000)