2

我正在尝试学习一些新的 MySQL 语法,但遇到了麻烦。这应该很简单...

我在这里跟随手册:http: //dev.mysql.com/doc/refman/5.5/en/case.html

但我不断收到语法错误。这是我的日常:

# Drop anonymous accounts, if any
USE mysql;
CASE (SELECT COUNT(*) FROM user WHERE User = '' AND Host = 'localhost') 
 WHEN 1 THEN
  DROP USER ''@'localhost';
  FLUSH PRIVILEGES; 
END CASE;

错误是:

ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'CASE (SELECT COUNT(*) FROM user WHERE User = '' AND Host = 'localhost') 附近使用的正确语法

提前致谢。

4

1 回答 1

2

在查看您关于固定语句但立即第二个问题的评论后,很明显您没有在存储过程或函数中使用它。文档flow control statements非常巧妙地指出它们需要在存储过程/函数中。

将您的代码更新到一个过程中,然后调用该过程来执行:

USE mysql;

DROP PROCEDURE p;
DELIMITER |
CREATE PROCEDURE p() BEGIN
    CASE (SELECT COUNT(*) FROM user WHERE User = '' AND Host = 'localhost') 
        WHEN 1 THEN
            DROP USER ''@'localhost';
            FLUSH PRIVILEGES;
        ELSE
            SELECT 'no users found!';
    END CASE;
END;
|

CALL p();

另请注意,我添加了一个包罗万象的ELSE块;如果您没有捕捉到该值,CASE将抛出“未找到案例”警告 - 这可能是可取的,也可能不是可取的。

于 2012-08-26T19:48:04.867 回答