Documentation Home
MySQL 8.0 参考手册  / 第 13 章 SQL 语句  / 13.1 数据定义语句  /  13.1.33 DROP TABLESPACE 语句

13.1.33 DROP TABLESPACE 语句

DROP [UNDO] TABLESPACE tablespace_name
    [ENGINE [=] engine_name]

此语句删除以前使用创建的表空间CREATE TABLESPACE。它由NDBInnoDB存储引擎支持。

MySQL 8.0.14 引入的UNDO关键字,必须指定删除undo 表空间。CREATE UNDO TABLESPACE只能删除使用语法创建的撤消表空间 。撤消表空间必须处于empty可以删除之前的状态。有关详细信息,请参阅 第 15.6.3.4 节,“撤消表空间”

ENGINE设置使用表空间的存储引擎,其中engine_name是存储引擎的名称。当前,值 InnoDBNDB受支持。如果未设置, default_storage_engine则使用的值。如果它与用于创建表空间的存储引擎不同,则DROP TABLESPACE语句失败。

tablespace_name是 MySQL 中区分大小写的标识符。

对于InnoDB通用表空间,必须在DROP TABLESPACE操作之前从表空间中删除所有表。如果表空间不为空,则 DROP TABLESPACE返回错误。

要删除的NDB表空间不得包含任何数据文件;换句话说,在删除 NDB表空间之前,必须先使用 ALTER TABLESPACE ... DROP DATAFILE.

笔记

  • InnoDB删除表空间中的最后一个表时,不会自动删除 通用表空间。必须使用 显式删除表空间 。 DROP TABLESPACE tablespace_name

  • 操作可以删除属于通用表空间的DROP DATABASE表,但不能删除表空间,即使该操作删除了属于该表空间的所有表。必须使用 显式删除表空间。 DROP TABLESPACE tablespace_name

  • 与系统表空间类似,截断或删除存储在通用表空间中的表会在通用表空间 .ibd 数据文件内部创建只能用于新InnoDB数据的可用空间。空间不会像 file-per-table 表空间那样释放回操作系统。

InnoDB 示例

此示例演示如何删除InnoDB 通用表空间。通用表空间ts1 是用单个表创建的。在删除表空间之前,必须先删除表。

mysql> CREATE TABLESPACE `ts1` ADD DATAFILE 'ts1.ibd' Engine=InnoDB;

mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY) TABLESPACE ts1 Engine=InnoDB;

mysql> DROP TABLE t1;

mysql> DROP TABLESPACE ts1;

此示例演示删除撤消表空间。撤消表空间必须处于empty可以删除之前的状态。有关详细信息,请参阅 第 15.6.3.4 节,“撤消表空间”

mysql> DROP UNDO TABLESPACE undo_003;

新开发银行示例

此示例显示如何删除具有在首次创建表NDB 空间后myts命名的数据文件 mydata-1.dat的表空间,并假设存在名为的日志文件组 mylg(请参阅 第 13.1.16 节,“CREATE LOGFILE GROUP 语句”)。

mysql> CREATE TABLESPACE myts
    ->     ADD DATAFILE 'mydata-1.dat'
    ->     USE LOGFILE GROUP mylg
    ->     ENGINE=NDB;

您必须使用 删除表空间中的所有数据文件 ALTER TABLESPACE,如此处所示,然后才能将其删除:

mysql> ALTER TABLESPACE myts
    ->     DROP DATAFILE 'mydata-1.dat'
    ->     ENGINE=NDB;

mysql> DROP TABLESPACE myts;