Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  DROP TABLESPACE Statement

15.1.33 DROP TABLESPACE 语句

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

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

必须指定 UNDO 关键字以删除撤销表空间。只有使用 CREATE UNDO TABLESPACE 语法创建的撤销表空间可以被删除。撤销表空间必须在空状态下才能被删除。有关更多信息,请参阅 第 17.6.3.4 节,“撤销表空间”

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

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

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

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

注意事项

  • 通用 InnoDB 表空间不会在最后一个表被删除时自动删除。表空间必须使用 DROP TABLESPACE tablespace_name 明确删除。

  • 一个 DROP DATABASE 操作可以删除属于通用表空间的表,但不能删除表空间,即使操作删除了表空间中的所有表。表空间必须使用 DROP TABLESPACE tablespace_name 明确删除。

  • 类似于系统表空间,截断或删除存储在通用表空间中的表会在通用表空间的 .ibd 数据文件 中创建免费空间,该空间只能用于新的 InnoDB 数据。空间不会被释放回操作系统,因为它是用于文件每表表空间的。

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;

该示例演示如何删除撤销表空间。撤销表空间必须在空状态下才能被删除。有关更多信息,请参阅 第 17.6.3.4 节,“撤销表空间”

mysql> DROP UNDO TABLESPACE undo_003;

NDB 示例

该示例显示如何删除 NDB 表空间 myts,其中包含一个名为 mydata-1.dat 的数据文件,假设存在一个名为 mylg 的日志文件组(请参阅 第 15.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;