MySQL 8.4 Release Notes
15.1.32 删除表语句
DROP [TEMPORARY] TABLE [IF EXISTS]
tbl_name [, tbl_name] ...
[RESTRICT | CASCADE]
DROP TABLE 删除一个或多个表。你必须对每个表拥有DROP 权限。
请小心这个语句!对于每个表,它删除了表定义和所有表数据。如果该表是分区表,语句删除了表定义、所有分区、所有存储在这些分区中的数据和与被删除表相关的分区定义。
删除一个表也删除该表的触发器。
DROP TABLE 导致隐式提交,除非使用了TEMPORARY 关键字。见第15.3.3节,“隐式提交语句”。
Important
当表被删除时,授予该表的特定权限不自动删除。必须手动删除。见第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关键字无效。它们是为了方便从其他数据库系统porting而保留的。
DROP TABLE 不支持所有innodb_force_recovery 设置。见第17.20.3节,“强制 InnoDB 恢复”.