MySQL 使用变量创建用户?

mysqlmysqli database

您可以使用动态查询来实现这一点。首先设置用户名的变量名和密码的变量名。语法如下 −

SET @anyVariableName=’yourUserName’;
SET @anyVariableName1=’yourpassword’;

现在您可以使用 MySQL 中的 CONCAT() 函数。语法如下 −

SET @yourQueryName = CONCAT
('
   CREATE USER "',@anyVariableName,'"@"localhost" IDENTIFIED BY "',@anyVariableName1,'" '
);

让我们使用准备好的语句 PREPARE。语法如下 −

PREPARE yourStatementVariableName FROM @yourQueryName;

现在您可以执行该语句。语法如下 −

EXECUTE yourStatementVariableName;

使用 DEALLOCATE PREPARE 释放上述内容。语法如下 −

DEALLOCATE PREPARE yourStatementVariableName;

为了理解上述语法,让我们遵循所有步骤 −

步骤 1 −首先使用 SET 命令创建两个变量,一个用于用户名,另一个用于密码。

创建用户名的查询如下 −

mysql> set @UserName:='John Doe';
Query OK, 0 rows affected (0.00 sec)

The query to create a password.

mysql> set @Password:='John Doe 123456';
Query OK, 0 rows affected (0.00 sec)

步骤 2 − 现在使用 CONCAT() 函数创建用户。查询如下 −

mysql> SET @CreationOfUser = CONCAT('
   '> CREATE USER "',@UserName,'"@"localhost" IDENTIFIED BY "',@Password,'" '
   -> );
Query OK, 0 rows affected (0.02 sec)

在上述查询中,我们使用了 @UserName 变量名和 @Password 变量名来创建具有名称和密码的用户。

步骤 3 − 现在您需要使用上述用户定义变量 @CreationOfUser 准备语句。查询如下 −

mysql> PREPARE st FROM @CreationOfUser;
Query OK, 0 rows affected (0.00 sec)
Statement prepared

步骤 4 − 执行上述准备好的语句。查询如下 −

mysql> EXECUTE st;
Query OK, 0 rows affected (0.37 sec)

步骤 5 −检查 MySQL.user 表中是否已创建用户"John Doe" −

mysql> select user,host from MySQL.user;

以下是输出 −

+------------------+-----------+
| user             | host      |
+------------------+-----------+
| Manish           | %         |
| User2            | %         |
| mysql.infoschema | %         |
| mysql.session    | %         |
| mysql.sys        | %         |
| root             | %         |
| @UserName@       | localhost |
| Adam Smith       | localhost |
| John             | localhost |
| John Doe         | localhost |
| User1            | localhost |
| am               | localhost |
| hbstudent        | localhost |
+------------------+-----------+
13 rows in set (0.00 sec)

是的,我们的用户名是 John Doe。

步骤 6 − 现在,DEALLOCATE 准备好的语句。查询如下 −

mysql> DEALLOCATE PREPARE st;
Query OK, 0 rows affected (0.00 sec)

相关文章