All these statements do the same - they create a new user without any privileges. First and second, they do this using the GRANT statement, where USE means - NO PRIVILEGES.
But there is a difference between the statements of GRANT + USAGE and CREATE USER:
grant usage on *.* to 'username1'@'localhost';
throws an error in case of NO_AUTO_CREATE_USER sql mode.
From the link - NO_AUTO_CREATE_USER Prevent automatic creation of GRANT for new users, if otherwise, this will happen if a non-empty password is specified.
You are right about GRANT and CREATE USER statements when a user exists; CREATE USER gives an error, but in this case, if you want to change the password, you can use SET PASSWORD , for example. -
SET PASSWORD FOR 'username'@'localhost' = PASSWORD('new password');
source share