2012-11-13 27 views
60

Mam zapytanie, aby sprawdzić listę użytkowników mysql do utworzenia nowego użytkownika.mysql utworzyć użytkownika, jeśli nie istnieje

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

ale pojawia się ten błąd:

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 

Odpowiedz

207

W 5.7.6 i wyżej, powinny być w stanie używać CREATE USER

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

Należy zauważyć, że metoda 5.7.6 faktycznie nie udzielać żadnych uprawnień.


Jeśli nie używasz wersji, która ma taką możliwość (coś poniżej 5.7.6), można wykonać następujące czynności:

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

To stworzy użytkownikowi jeśli nie istnieją

+6

Myślę, że to naprawdę powinna być zaakceptowana odpowiedź. – GoinAum

+1

Czy zmienia to hasło, jeśli użytkownik istniał i miał inne hasło? – m3z

+2

Nevermind - odpowiedział na moje własne pytanie - tak, robi - ale nie zastępuje użytkownika, jeśli Host jest inny – m3z

-4

użyć

SELECT istnieje (SELECT DISTINCT user Z mysql. user GDZIE user = „usernam E "), jak is_user

powinna powrócić 1 lub 0, jeżeli istnieje, czy nie, jeśli

+2

pytanie nie dotyczy tego, jak sprawdzić, ale jak utworzyć – VladL