# 删除用户

在本教程中，您将学习如何使用MySQL `DROP USER`语句来删除用户帐户。

## MySQL DROP USER语句介绍

要删除一个或多个[用户帐户](http://www.yiibai.com/mysql/create-user.html)，请按如下所示使用`DROP USER`语句：

```sql
DROP USER user, [user],...;
```

要删除用户，可以在`DROP USER`子句之后的`'user_name'@'host_name'`格式中指定帐户名称。如果要一次删除多个用户，请使用以逗号分隔的用户列表。

如果删除不存在的用户帐户，MySQL将发出错误。 从*MySQL 5.7.8*开始，可以使用`IF EXISTS`子句来指示该语句在删除不存在的用户帐户时发出警告，而不是发出错误。

```sql
DROP USER [IF EXISTS] user, [user],...;
```

除了删除用户帐户之外，`DROP USER`语句还会从所有授权表中删除所有权限。

## 删除用户帐户示例

要查看MySQL服务器中的数据库:`mysql`的所有用户信息，请使用以下[SELECT](http://www.yiibai.com/mysql/select-statement-query-data.html)语句：

```sql
USE mysql;
SELECT user, host FROM mysql.user;
```

下面是我在编写本教程时所使用MySQL数据库中的用户帐号列表：

```sql
mysql> SELECT user, host FROM mysql.user;
+---------------+-----------+
| user          | host      |
+---------------+-----------+
| api@localhost | %         |
| remote_user   | %         |
| rfc           | %         |
| superadmin    | %         |
| auditor       | localhost |
| dbadmin       | localhost |
| mysql.sys     | localhost |
| root          | localhost |
| super         | localhost |
+---------------+-----------+
9 rows in set
```

假设您要删除用户帐户：`api@localhost`，请使用以下语句：

```sql
DROP USER 'api@localhost';
```

再次从`mysql.user`表中查询数据，您将看到用户`api@localhost`已被删除。

数据库中的`mysql.user`表的用户帐号列表如下所示：

```sql
mysql> SELECT user, host FROM mysql.user;
+-------------+-----------+
| user        | host      |
+-------------+-----------+
| remote_user | %         |
| rfc         | %         |
| superadmin  | %         |
| auditor     | localhost |
| dbadmin     | localhost |
| mysql.sys   | localhost |
| root        | localhost |
| super       | localhost |
+-------------+-----------+
8 rows in set
```

要删除单个`DROP USER`语句中两个用户：`remote_user`和`auditor`的帐户，请使用以下语句：

```sql
DROP USER remote_user, auditor;
```

下面可验证删除操作的结果，再次查询`mysql.user`表中的用户信息 -

```sql
SELECT user, host FROM mysql.user;
```

假设用户帐户已登录，并且正在运行会话。 如果您删除用户帐户，则不会停止打开的会话。 活动会话将继续，直到用户退出。通常，在这种情况下，您应该在执行`DROP USER`语句之前立即关闭用户的会话。

*首先*，需要使用`SHOW PROCESSLIST`语句识别用户的进程标识。

如您所见，`dbadmin@localhost`用户帐户的进程号为：`40`。

*第二*，通过杀死这个进程 -

```sql
KILL 40;
```

用户帐户`dbadmin@localhost`收到一条错误消息：

```sql
ERROR 2013 (HY000): Lost connection to MySQL server during query
```

*第三*，执行`DROP USER`语句删除用户帐户`dbadmin@localhost`：

```sql
DROP USER dbadmin@localhost;
```

请注意，如果不终止活动会话，则删除的用户(如果连接到数据库服务器)仍然可以执行所有操作，直到会话结束。

在本教程中，您已经学会了如何使用MySQL `DROP USER`语句来删除一个或多个用户帐户。
