MySQL错误#2014 - 命令不同步; 你现在不能运行这个命令

kid*_*yen 10 mysql stored-procedures

我正在使用MySQL,我正在定义一个这样的存储过程:

delimiter ;;
Create procedure sp_test()

  select * from name_table;
end
Run Code Online (Sandbox Code Playgroud)

当我尝试执行该过程时,我收到此错误:

#2014 - Commands out of sync; you can't run this command now 
Run Code Online (Sandbox Code Playgroud)

这意味着什么,我做错了什么?

Met*_*iel 13

就我而言,我的存储过程具有以下结构:

DELIMITER //
    DROP PROCEDURE IF EXISTS processcolumns;
    CREATE PROCEDURE processcolumns ()
    BEGIN
        (...)
    END //
DELIMITER ;

CALL processcolumns ();
DROP PROCEDURE processcolumns;
Run Code Online (Sandbox Code Playgroud)

问题在于:DROP PROCEDURE IF EXISTS processcolumns; 我删除了分号;并将其替换为分隔符,//如下所示:

DROP PROCEDURE IF EXISTS processcolumns //
Run Code Online (Sandbox Code Playgroud)

现在已经解决了!

  • 这对我来说非常有效,只需将新的分隔符放在 DROP 命令的末尾即可。感谢您提供简单的解决方案,尽管我不知道它是如何解决问题的。 (2认同)

Mar*_*rco 12

来自手册

C.5.2.14.命令不同步
如果Commands out of sync; you can't run this command now您使用客户端代码,则会以错误的顺序调用客户端函数.

例如,如果您mysql_use_result()在调用之前使用并尝试执行新查询,则可能会发生这种情况mysql_free_result().如果您尝试执行两个不调用mysql_use_result()mysql_store_result()在两者之间返回数据的查询,也会发生这种情况.

这篇文章(取自这里)

我已经解决了这个问题.我使用MySQL-Fron而不是MySQL Query浏览器.一切正常.

让我觉得它不是服务器或数据库问题,而是您正在使用的工具中的问题.


Eri*_*ski 6

我能用MySQL和phpmyadmin重现这个错误:

#2014 - Commands out of sync; you can't run this command now
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 在这个版本的MySQL上:

el@apollo:~$ mysql --version
mysql  Ver 14.14 Distrib 5.5.34, for debian-linux-gnu (x86_64) using readline 6.2
Run Code Online (Sandbox Code Playgroud)

使用以下SQL运行phpmyadmin查询窗口:

use my_database;
DELIMITER $$

CREATE PROCEDURE foo()
BEGIN
select 'derp' as 'msg';
END $$

CALL foo()$$           <----Error happens here, with or without delimiters.
Run Code Online (Sandbox Code Playgroud)

我无法通过mysql终端发生错误,所以我认为这是phpmyadmin的一个错误.

它在终端上工作正常:

mysql> delimiter $$
mysql> use my_database$$ create procedure foo() begin select 'derp' as 'msg'; end $$ call foo() $$
Database changed
Query OK, 0 rows affected (0.00 sec)
+------+
| msg  |
+------+
| derp |
+------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

我认为该bug与更改phpmyadmin中的分隔符中间分隔符有关.

解决方法:使用phpmyadmin时,减慢他们的牛仔并一次运行一个SQL语句.phpmyadmin是"单一任务鲍勃",他只能做一份工作.