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 恢复”。