MySQL 8.4 Release Notes
15.1.32 删除表语句
DROP [TEMPORARY] TABLE [IF EXISTS]
tbl_name [, tbl_name] ...
[RESTRICT | CASCADE]
DROP TABLE
删除一个或多个表。你必须对每个表拥有DROP
权限。
请小心这个语句!对于每个表,它删除了表定义和所有表数据。如果该表是分区表,语句删除了表定义、所有分区、所有存储在这些分区中的数据和与被删除表相关的分区定义。
删除一个表也删除该表的触发器。
DROP TABLE
导致隐式提交,除非使用了TEMPORARY
关键字。见第15.3.3节,“隐式提交语句”。
Important
当表被删除时,授予该表的特定权限不自动删除。必须手动删除。见第15.7.1.6节,“GRANT 语句”。
DROP TABLE
如果参数列表中指定的表不存在,行为取决于是否给出了IF EXISTS
子句:
-
没有
IF EXISTS
,语句失败,显示无法删除的非存在表,并且不做任何修改。 -
使用
IF EXISTS
,对不存在的表不会出现错误。语句删除所有存在的命名表,并为每个不存在的表生成一个NOTE
诊断信息。这些信息可以通过SHOW WARNINGS
显示。请参阅第15.7.7.41节,“SHOW WARNINGS 语句”。
IF EXISTS
也可以在存储引擎中有表记录但实际上没有管理的异常情况下使用(例如,服务器异常退出后删除了表,但数据字典记录还存在)。
以下是TEMPORARY
关键字的效果:
-
语句只删除
TEMPORARY
表。 -
语句不隐式提交事务。
-
不检查访问权限。一个
TEMPORARY
表只能在创建它的会话中可见,所以不需要检查。
包括TEMPORARY
关键字可以防止意外删除非TEMPORARY
表。
RESTRICT
和CASCADE
关键字无效。它们是为了方便从其他数据库系统porting而保留的。
DROP TABLE
不支持所有innodb_force_recovery
设置。见第17.20.3节,“强制 InnoDB 恢复”.