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.41 节,“SHOW WARNINGS 语句”。
IF EXISTS
也可以用于在某些特殊情况下删除表,在这些情况下,数据字典中存在条目,但存储引擎中没有管理的表。(例如,如果在从存储引擎中删除表后但从数据字典中删除条目之前,服务器异常退出)。
TEMPORARY
关键字有以下作用
该语句仅删除
TEMPORARY
表。该语句不会导致隐式提交。
不会检查访问权限。一个
TEMPORARY
表只能被创建它的会话看到,因此不需要进行检查。
包含 TEMPORARY
关键字是防止意外删除非 TEMPORARY
表的有效方法。
RESTRICT
和 CASCADE
关键字不执行任何操作。允许它们是为了便于从其他数据库系统移植。
DROP TABLE
不支持所有 innodb_force_recovery
设置。请参见 第 17.20.3 节,“强制 InnoDB 恢复”。