DROP TABLE语句
DROP [TEMPORARY ]TABLE [IF EXISTS ] tbl_name [, tbl_name] ... [RESTRICT |CASCADE ]
DROP TABLE
删除一个或多个表。您必须具有DROP
每个表的特权。
请谨慎使用此声明!对于每个表,它将删除表定义和所有表数据。如果表已分区,则该语句将删除表定义,其所有分区,存储在这些分区中的所有数据以及与删除的表关联的所有分区定义。
删除表还会删除该表的所有触发器。
DROP TABLE
导致隐式提交,除非与TEMPORARY
关键字一起使用。请参见“START TRANSACTION,COMMIT和ROLLBACK语句”。
重要删除表时,不会自动删除专门为该表授予的特权。必须手动删除它们。请参见“ GRANT语句”。
如果参数列表中命名的任何表都不存在,则DROP TABLE
行为取决于是否提供了该IF EXISTS
子句:
- 没有
IF EXISTS
,该语句将失败,并显示一条错误,指出它无法删除哪些不存在的表,并且不进行任何更改。 - 使用
IF EXISTS
,对于不存在的表不会发生错误。该语句删除所有确实存在的命名表,并NOTE
为每个不存在的表生成诊断。这些注释可以用显示SHOW WARNINGS
。请参见“ SHOW WARNINGS语句”。
IF EXISTS
在异常情况下删除表也很有用,在这种情况下,数据字典中有一个条目,但没有表由存储引擎管理。(例如,如果从存储引擎删除表之后但在删除数据字典条目之前发生异常的服务器退出。)
该TEMPORARY
关键字具有以下作用:
- 该语句仅删除
TEMPORARY
表。 - 该语句不会导致隐式提交。
- 没有检查访问权限。一个
TEMPORARY
表仅在创建它的会话中可见,因此不需要检查。
包含TEMPORARY
关键字是防止意外删除非TEMPORARY
表的好方法。
在RESTRICT
和CASCADE
关键字无能为力。允许它们使从其他数据库系统的移植更加容易。
DROP TABLE
并非所有innodb_force_recovery
设置都支持。请参见“InnoDB恢复”。