#### 13.7.1.4 DROP ROLE 语句

[](<>)[](<>)[](<>)

```
DROP ROLE [IF EXISTS] role [, role ] ...
```

[`删除角色`](drop-role.html)删除一个或多个角色（命名的特权集合）。要使用此语句，您必须具有全局[`删除角色`](privileges-provided.html#priv_drop-role)要么[`创建用户`](privileges-provided.html#priv_create-user)特权。当。。。的时候[`只读`](server-system-variables.html#sysvar_read_only)系统变量已启用，[`删除角色`](drop-role.html)另外需要[`CONNECTION_ADMIN`](privileges-provided.html#priv_connection-admin)特权（或已弃用的[`极好的`](privileges-provided.html#priv_super)特权）。

从 MySQL 8.0.16 开始，拥有[`创建用户`](privileges-provided.html#priv_create-user)privilege 可以使用此语句删除锁定或解锁的帐户。拥有[`删除角色`](privileges-provided.html#priv_drop-role)privilege 只能使用此语句删除被锁定的帐户（未锁定的帐户可能是用于登录服务器的用户帐户，而不仅仅是角色）。

中命名的角色[`强制角色`](server-system-variables.html#sysvar_mandatory_roles)系统变量值不能被删除。

[`删除角色`](drop-role.html)要么对所有命名角色成功，要么回滚，如果发生任何错误则无效。默认情况下，如果您尝试删除不存在的角色，则会发生错误。如果`如果存在`给定子句时，该语句会为每个不存在的命名角色生成警告，而不是错误。

如果成功，该语句将写入二进制日志，但如果失败则不会；在这种情况下，会发生回滚并且不会进行任何更改。写入二进制日志的语句包括所有命名角色。如果`如果存在`子句，这甚至包括不存在且未被删除的角色。

每个角色名称都使用中描述的格式[第 6.2.5 节，“指定角色名称”](role-names.html).例如：

```
DROP ROLE 'admin', 'developer';
DROP ROLE 'webapp'@'localhost';
```

角色名的主机名部分，如果省略，默认为`'%'`.

已删除的角色会自动从授予该角色的任何用户帐户（或角色）中撤消。在此类帐户的任何当前会话中，其调整后的权限从执行的下一条语句开始应用。

有关角色使用示例，请参阅[第 6.2.10 节，“使用角色”](roles.html).
