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)