2012-11-13 39 views
60

Tôi có một truy vấn để kiểm tra danh sách người dùng mysql để tạo người dùng mới.mysql tạo người dùng nếu không tồn tại

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

Nhưng tôi nhận được lỗi này:

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 

Trả lời

207

Trong 5.7.6 trở lên, bạn sẽ có thể sử dụng CREATE USER

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

Lưu ý rằng phương pháp 5.7.6 không thực sự thừa nhận bất kì quyền.


Nếu bạn không sử dụng một phiên bản trong đó có khả năng này (một cái gì đó bên dưới 5.7.6), bạn có thể làm như sau:

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

này sẽ tạo cho người sử dụng nếu nó không tồn tại

+6

Tôi nghĩ rằng điều này thực sự nên là câu trả lời được chấp nhận. – GoinAum

+1

Điều này có thay đổi mật khẩu nếu người dùng đã tồn tại và có mật khẩu khác không? – m3z

+2

Nevermind - trả lời câu hỏi của riêng tôi - có nó - nhưng nó không thay thế người dùng nếu Máy chủ khác – m3z

-4

tôi sử dụng

CHỌN EXISTS (SELECT DISTINCT user TỪ mysql. user ĐÂU user = "tên người dùng e ") như is_user

nên trở về 1 nếu tồn tại hoặc 0 nếu nó không

+2

câu hỏi không phải là về cách kiểm tra, nhưng cách tạo – VladL

Các vấn đề liên quan