2012-08-14 71 views
8

我想做到这一点:MySQL使用变量创建用户?

#Variables 
SET @username="jdoe", @password="secret"; 

# Insert a new MySQL User 
CREATE USER @[email protected]'localhost' IDENTIFIED BY @password;GRANT USAGE ON *.* TO @[email protected]'localhost' IDENTIFIED BY @password WITH MAX_QUERIES_PER_HOUR 120 MAX_CONNECTIONS_PER_HOUR 60 MAX_UPDATES_PER_HOUR 60 MAX_USER_CONNECTIONS 2; 

但得到:

#1064 - 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 '@[email protected]'localhost' IDENTIFIED BY @password' at line 2 

如何在CREATE USER语句中使用一个变量?

+0

可能重复http://stackoverflow.com/questions/11368966/syntax-error-from -create-user-with-variables-giving-username-and-password) – aleroot 2012-08-14 12:12:46

+1

@aleroot我不确定这是相同的问题,因为它涉及到创建存储过程。 – Nick 2012-08-14 12:19:39

回答

9

您可以使用dynamic SQL为:

SET @query1 = CONCAT(' 
     CREATE USER "',@username,'"@"localhost" IDENTIFIED BY "',@password,'" ' 
     ); 
PREPARE stmt FROM @query1; EXECUTE stmt; DEALLOCATE PREPARE stmt; 

SET @query1 = CONCAT(' 
    GRANT USAGE ON *.* TO "',@username,'"@"localhost" IDENTIFIED BY "',@password,'" WITH 
      MAX_QUERIES_PER_HOUR 120 MAX_CONNECTIONS_PER_HOUR 60 MAX_UPDATES_PER_HOUR 60 
      MAX_USER_CONNECTIONS 2' 
     ); 
PREPARE stmt FROM @query1; EXECUTE stmt; DEALLOCATE PREPARE stmt; 
[语法错误从创建变量给出用户名和密码USER](的
+0

这似乎没有工作......我得到'#1064 - 你的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以获得在'secret'附近使用的正确语法; 授予使用*。*到jdoe @'localhost'IDENTIFIED BY secret 'at line 1' – Nick 2012-08-14 11:56:37

+0

错过了引号。尝试更新查询。 – Omesh 2012-08-14 12:36:20

+1

非常好,谢谢! – Nick 2012-08-14 12:44:17