删除MySQL中不存在的过程

删除MySQL中不存在的过程,mysql,sql-drop,Mysql,Sql Drop,我在fedora上使用MySQL 5.5.31,我很难删除一个不存在的过程。 对于根用户: 创建新数据库:test 创建一个新用户:test 为数据库测试的用户测试授予所有权限 GRANT ALL PRIVILEGES ON test.* TO 'test'@'%' WITH GRANT OPTION; 带用户测试 CREATE PROCEDURE test.foo() SELECT NOW(); DROP PROCEDURE IF EXISTS test.foo; Query OK,

我在fedora上使用MySQL 5.5.31,我很难删除一个不存在的过程。 对于根用户:

  • 创建新数据库:test
  • 创建一个新用户:test
  • 为数据库测试的用户测试授予所有权限

    GRANT ALL PRIVILEGES ON test.* TO 'test'@'%' WITH GRANT OPTION;
    
  • 带用户测试

    CREATE PROCEDURE test.foo() SELECT NOW();
    DROP PROCEDURE IF EXISTS test.foo;
    
    Query OK, 0 rows affected (0.00 sec)
    
    DROP PROCEDURE IF EXISTS test.foo;
    
    ERROR 1370 (42000): alter routine command denied to user 'test'@'localhost' for routine 'test.foo'
    
    CREATE PROCEDURE test.foo() SELECT NOW();
    
    DROP PROCEDURE IF EXISTS test.foo;
    Query OK, 0 rows affected (0.00 sec)
    
    DROP PROCEDURE IF EXISTS test.foo;
    Query OK, 0 rows affected, 1 warning (0.00 sec)
    
为什么“如果存在”不起作用

如果我对root用户执行相同的操作,则一切正常(带有警告,但没关系):

  • 带用户测试

    CREATE PROCEDURE test.foo() SELECT NOW();
    DROP PROCEDURE IF EXISTS test.foo;
    
    Query OK, 0 rows affected (0.00 sec)
    
    DROP PROCEDURE IF EXISTS test.foo;
    
    ERROR 1370 (42000): alter routine command denied to user 'test'@'localhost' for routine 'test.foo'
    
    CREATE PROCEDURE test.foo() SELECT NOW();
    
    DROP PROCEDURE IF EXISTS test.foo;
    Query OK, 0 rows affected (0.00 sec)
    
    DROP PROCEDURE IF EXISTS test.foo;
    Query OK, 0 rows affected, 1 warning (0.00 sec)
    

首先,
授予所有测试特权。*使用授予选项“测试”@“%”localhost连接时,code>不会向用户授予特权

您需要分别为
localhost
授予权限

从错误中可以看出,您在第一次
拖放之后正在断开连接
,然后再次从
本地主机连接

好的,如果您一个接一个地执行这4条语句,您应该会得到与使用
root

GRANT ALL PRIVILEGES ON test.* TO 'test'@'%' WITH GRANT OPTION;
CREATE PROCEDURE test.foo() SELECT NOW();
DROP PROCEDURE IF EXISTS test.foo; 
DROP PROCEDURE IF EXISTS test.foo; 

让我知道,如果我已经把我的答案说清楚了

试着使用
SET-sql\u-notes=0
DROP PROCEDURE IF EXISTS
命令之前。

感谢您的回复,我完全忽略了这一部分:您需要分别为本地主机授予权限。首先,您是否要尝试依次执行这4条语句?