MySQL - 如果不存在则创建用户
MySQL - CREATE USER IF NOT EXISTS
CREATE USER IF NOT EXISTS ...
创建新用户没有问题。现有用户 returns 该错误,但文档显示 CREATE USER
for MySQL > 5.7.6 支持它。
MySQL版本为
Ver 14.14 Distrib 5.7.11, for osx10.9 (x86_64) using EditLine wrapper
样本
<root:none> CREATE USER IF NOT EXISTS 'foo'@'localhost' IDENTIFIED BY 'bar';
--------------
CREATE USER IF NOT EXISTS 'foo'@'localhost' IDENTIFIED BY 'bar'
--------------
Query OK, 0 rows affected (0.00 sec)
<root:none> CREATE USER IF NOT EXISTS 'foo'@'localhost' IDENTIFIED BY 'bar';
--------------
CREATE USER IF NOT EXISTS 'foo'@'localhost' IDENTIFIED BY 'bar'
--------------
ERROR 1396 (HY000): Operation CREATE USER failed for 'foo'@'localhost'
建议?
尝试执行 FLUSH PRIVILEGES。
FLUSH PRIVILEGES;
GRANT ALL ON *.* TO 'foo'@'localhost';
您可以查看link。它可能对你有帮助
link
如果您使用 IDENTIFIED BY
子句并且用户确实存在,CREATE USER IF NOT EXISTS
将引发错误。如果您不使用 IDENTIFIED BY
子句,它不会抛出错误并按预期工作。
mysql> CREATE USER IF NOT EXISTS 'foo'@'localhost' IDENTIFIED BY 'bar';
Query OK, 0 rows affected (0.01 sec)
mysql> CREATE USER IF NOT EXISTS 'foo'@'localhost' IDENTIFIED BY 'bar';
ERROR 1396 (HY000): Operation CREATE USER failed for 'foo'@'localhost'
mysql> CREATE USER IF NOT EXISTS 'foo'@'localhost';
Query OK, 0 rows affected, 1 warning (0.00 sec)
从 5.7.8 开始,您可以在使用 IDENTIFIED BY
子句调用 CREATE USER
之前使用 DROP USER IF EXISTS
,而不是使用 CREATE USER IF NOT EXISTS
。
mysql> DROP USER 'foo'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> DROP USER 'foo'@'localhost';
ERROR 1396 (HY000): Operation DROP USER failed for 'foo'@'localhost'
mysql> DROP USER IF EXISTS 'foo'@'localhost';
Query OK, 0 rows affected, 1 warning (0.00 sec)
另一种方式是先创建用户,创建用户后再设置密码。
mysql> CREATE USER IF NOT EXISTS 'foo'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE USER IF NOT EXISTS 'foo'@'localhost';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> SET PASSWORD FOR 'foo'@'localhost' = 'bar';
Query OK, 0 rows affected (0.01 sec)
CREATE USER IF NOT EXISTS ...
创建新用户没有问题。现有用户 returns 该错误,但文档显示 CREATE USER
for MySQL > 5.7.6 支持它。
MySQL版本为
Ver 14.14 Distrib 5.7.11, for osx10.9 (x86_64) using EditLine wrapper
样本
<root:none> CREATE USER IF NOT EXISTS 'foo'@'localhost' IDENTIFIED BY 'bar';
--------------
CREATE USER IF NOT EXISTS 'foo'@'localhost' IDENTIFIED BY 'bar'
--------------
Query OK, 0 rows affected (0.00 sec)
<root:none> CREATE USER IF NOT EXISTS 'foo'@'localhost' IDENTIFIED BY 'bar';
--------------
CREATE USER IF NOT EXISTS 'foo'@'localhost' IDENTIFIED BY 'bar'
--------------
ERROR 1396 (HY000): Operation CREATE USER failed for 'foo'@'localhost'
建议?
尝试执行 FLUSH PRIVILEGES。
FLUSH PRIVILEGES;
GRANT ALL ON *.* TO 'foo'@'localhost';
您可以查看link。它可能对你有帮助
link
IDENTIFIED BY
子句并且用户确实存在,CREATE USER IF NOT EXISTS
将引发错误。如果您不使用 IDENTIFIED BY
子句,它不会抛出错误并按预期工作。
mysql> CREATE USER IF NOT EXISTS 'foo'@'localhost' IDENTIFIED BY 'bar';
Query OK, 0 rows affected (0.01 sec)
mysql> CREATE USER IF NOT EXISTS 'foo'@'localhost' IDENTIFIED BY 'bar';
ERROR 1396 (HY000): Operation CREATE USER failed for 'foo'@'localhost'
mysql> CREATE USER IF NOT EXISTS 'foo'@'localhost';
Query OK, 0 rows affected, 1 warning (0.00 sec)
从 5.7.8 开始,您可以在使用 IDENTIFIED BY
子句调用 CREATE USER
之前使用 DROP USER IF EXISTS
,而不是使用 CREATE USER IF NOT EXISTS
。
mysql> DROP USER 'foo'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> DROP USER 'foo'@'localhost';
ERROR 1396 (HY000): Operation DROP USER failed for 'foo'@'localhost'
mysql> DROP USER IF EXISTS 'foo'@'localhost';
Query OK, 0 rows affected, 1 warning (0.00 sec)
另一种方式是先创建用户,创建用户后再设置密码。
mysql> CREATE USER IF NOT EXISTS 'foo'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE USER IF NOT EXISTS 'foo'@'localhost';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> SET PASSWORD FOR 'foo'@'localhost' = 'bar';
Query OK, 0 rows affected (0.01 sec)