如果您使用IDENTIFIED BY子句并且用户确实存在,则CREATE USER IF NOT 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)