DROP [TEMPORARY] TABLE [IF EXISTS]
tbl_name [, tbl_name] ...
[RESTRICT | CASCADE]
DROP TABLE
删除一个或多个表。你必须拥有每个表的 DROP
权限。
小心 使用这个语句!对于每个表,它删除表定义和所有表数据。如果表是分区的,语句删除表定义、所有分区、所有存储在这些分区中的数据和与删除的表关联的所有分区定义。
删除表也删除该表的所有触发器。
DROP TABLE
导致隐式提交,除非使用 TEMPORARY
关键字。见 第 15.3.3 节,“隐式提交的语句”。
当表被删除时,特定于该表的权限不会自动删除。它们必须手动删除。见 第 15.7.1.6 节,“GRANT 语句”。
如果参数列表中的任何表不存在,DROP TABLE
的行为取决于是否给出了 IF EXISTS
子句:
-
没有
IF EXISTS
,语句将失败,指出它无法删除的非存在表,并且不进行任何更改。 -
使用
IF EXISTS
,对于不存在的表不发生错误。语句删除所有存在的表,并生成一个NOTE
诊断信息,每个不存在的表。这些信息可以使用SHOW WARNINGS
显示。见 第 15.7.7.44 节,“SHOW WARNINGS 语句”。
IF EXISTS
也可以在特殊情况下用于删除表,在这种情况下,数据字典中存在条目,但存储引擎中没有表。(例如,如果服务器异常退出后,存储引擎中删除了表,但数据字典中仍然存在该表的条目。)
The TEMPORARY
关键字具有以下效果:
-
该语句仅删除
TEMPORARY
表。 -
该语句不导致隐式提交。
-
不检查访问权限。
TEMPORARY
表只能在创建它的会话中可见,因此不需要检查。
包括 TEMPORARY
关键字是一个不错的方法,以防止意外删除非 TEMPORARY
表。
The RESTRICT
和 CASCADE
关键字不起作用。它们被允许,以便从其他数据库系统中移植。
DROP TABLE
不支持所有 innodb_force_recovery
设置。请参阅 第 17.20.3 节,“强制 InnoDB 恢复”。