我正在尝试学习一些新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"警告,这可能是可取的,也可能不是可取的。