我的MySQL CASE/WHEN语法有什么问题



我正在尝试学习一些新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主机="localhost")

提前谢谢。

在查看了关于固定语句但立即出现的第二个问题的注释后,很明显您没有在存储过程或函数中使用它。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();

还要注意,我添加了一个catch-all ELSE块;如果您没有捕捉到该值,CASE将抛出"Case not found"警告,这可能是可取的,也可能不是可取的。

相关内容

  • 没有找到相关文章

最新更新