0

Fedora で MySQL 5.5.31 を使用していますが、存在しないプロシージャを削除するのに問題があります。root ユーザーの場合:

  • 新しいデータベースを作成します: テスト
  • 新しいユーザーを作成します: テスト
  • データベース 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'
    

「IF EXISTS」が機能しないのはなぜですか?

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;
    Query OK, 0 rows affected, 1 warning (0.00 sec)
    
4

2 に答える 2