13.1.29 DROP TABLE 语句

DROP [TEMPORARY] TABLE [IF EXISTS]
    tbl_name [, tbl_name] ...
    [RESTRICT | CASCADE]

DROP TABLE删除一个或多个 table。每个 table 都必须具有DROP特权。

请谨慎此声明!对于每个 table,它将删除 table 定义和所有 table 数据。如果 table 已分区,则该语句将删除 table 定义,其所有分区,存储在这些分区中的所有数据以及与删除的 table 关联的所有分区定义。

删除 table 也会删除该 table 的所有触发器。

DROP TABLE导致隐式提交,除非与TEMPORARY关键字一起使用。参见第 13.3.3 节“导致隐式提交的声明”

Important

删除 table 后,不会自动删除专门为该 table 授予的特权。必须手动删除它们。参见第 13.7.1.4 节“ GRANT 语句”

如果在参数列 table 中命名的 table 不存在,则DROP TABLE的行为取决于是否提供了IF EXISTS子句:

  • 如果没有IF EXISTS,则该语句将删除所有确实存在的命名 table,并返回错误,指出无法删除哪些不存在的 table。

  • 使用IF EXISTS,不存在的 table 不会发生错误。该语句删除所有确实存在的命名 table,并为每个不存在的 table 生成NOTE诊断。这些 Comments 可以用SHOW WARNINGS显示。参见第 13.7.5.40 节“ SHOW 警告声明”

IF EXISTS在异常情况下删除 table 很有用,在这种情况下,存在.frm文件但存储引擎无法 Managementtable。 (例如,如果从存储引擎中删除 table 之后但在.frm文件删除之前发生了异常的服务器退出.)

TEMPORARY关键字具有以下效果:

  • 该语句仅删除TEMPORARY个 table。

  • 该语句不会导致隐式提交。

  • 没有检查访问权限。 TEMPORARYtable 仅在创建它的会话中可见,因此无需检查。

包含TEMPORARY关键字是防止意外删除非TEMPORARYtable 的好方法。

RESTRICTCASCADE关键字无效。允许它们使从其他数据库系统的移植更加容易。

并非所有innodb_force_recovery设置都支持DROP TABLE。参见第 14.22.2 节“强制 InnoDB 恢复”