2012-11-13 28 views
60

Ho una query per controllare l'elenco utenti mysql per creare un nuovo utente.mysql crea utente se non esiste

IF (SELECT EXISTS(SELECT 1 FROM `mysql`.`user` WHERE `user` = '{{ title }}')) = 0 THEN 
    CREATE USER '{{ title }}'@'localhost' IDENTIFIED BY '{{ password }}' 
END IF; 

ma ottengo questo errore:

ERROR 1064 (42000) at line 3: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF (SELECT EXISTS(SELECT 1 FROM `mysql`.`user` WHERE `user` = 'cms_localhost')) = 0 ' at line 1 

risposta

207

In 5.7.6 e, soprattutto, si dovrebbe essere in grado di utilizzare CREATE USER

CREATE USER IF NOT EXISTS 'user'@'localhost' IDENTIFIED BY 'password'; 

Si noti che il metodo 5.7.6 realtà non concede alcuna autorizzazione.


Se non si utilizza una versione che ha questa capacità (si parla qui di seguito 5.7.6), è possibile effettuare le seguenti operazioni:

GRANT ALL ON `database`.* TO 'user'@'localhost' IDENTIFIED BY 'password'; 

Questo creerà l'utente se non lo fa esisto

+6

Penso che questa dovrebbe essere la risposta accettata. – GoinAum

+1

Cambia la password se l'utente esisteva e aveva una password diversa? – m3z

+2

Nevermind - risponde alla mia domanda - sì sì - ma non sostituisce l'utente se l'host è diverso – m3z

-4

io uso

SELEZIONA ESISTENTE (SELECT DISTINCT FROM usermysql. user DOVE user = "usernam e ") come is_user

deve restituire 1 se esiste o 0 se non lo fa

+2

la domanda non riguarda come controllare, ma come creare – VladL