有什么不对我的MySQL CASE / WHEN语法?(What is wrong with my

2019-09-21 16:58发布

我想学习一些新的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用户WHERE USER =‘’和Host =‘localhost’的)

提前致谢。

Answer 1:

审查关于该固定语句,但眼前第二个问题,您的评论后,很明显,你不是一个存储过程或函数中使用此。 对于文档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将抛出一个“案未找到”警告-这可能是也可能不是可取的。



文章来源: What is wrong with my MySQL CASE/WHEN syntax?
标签: mysql mysql5