我的MySQL CASE / WHEN语法出了什么问题?

时间:2012-08-26 19:37:25

标签: mysql mysql5

我正在尝试学习一些新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;

错误是:

  

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

提前致谢。

1 个答案:

答案 0 :(得分: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将抛出“未找到案例”警告 - 这可能是也可能不是。