13.1.30 DROP TABLESPACE 语句

DROP TABLESPACE tablespace_name
    [ENGINE [=] engine_name]

该语句删除先前使用CREATE TABLESPACE创建的 table 空间。所有 MySQL NDB Cluster 7.5 版本以及标准 MySQL Server 中的InnoDB都支持它。

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

对于InnoDBtable 空间,必须在进行DROP TABLESPACE操作之前从 table 空间中删除所有 table。如果 table 空间不为空,则DROP TABLESPACE返回错误。

InnoDB系统 table 空间一样,截断或删除存储在常规 table 空间中的InnoDBtable 会在 table 空间.ibd 数据文件中创建可用空间,该空间只能用于新的InnoDB数据。空间不会通过像每 table 文件 table 空间那样的操作释放回 os。

要删除的NDBtable 空间不得包含任何数据文件;换句话说,在删除NDBtable 空间之前,必须首先使用ALTER TABLESPACE ...删除数据文件删除其每个数据文件。

Notes

  • table 空间不会自动删除。必须使用DROP TABLESPACE明确删除 table 空间。即使该操作删除了属于该 table 空间的所有 table,DROP DATABASE对此也没有影响。

  • DROP DATABASE操作可以删除属于常规 table 空间的 table,但是即使操作删除了属于该 table 空间的所有 table,也不能删除该 table 空间。必须使用DROP TABLESPACE tablespace_name明确删除 table 空间。

  • 与系统 table 空间类似,删节或删除存储在常规 table 空间中的 table 会在常规 table 空间.ibd 数据文件内部内部创建可用空间,该可用空间仅可用于新的InnoDB数据。每个 table 文件 table 空间的空间不会释放回 os。

InnoDB Example

本示例演示如何删除InnoDB常规 table 空间。通用 table 空间ts1是使用单个 table 创建的。在删除 table 空间之前,必须删除 table。

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;

NDB Example

此示例说明如何在首先创建 table 空间之后删除具有数据文件mydata-1.datNDBtable 空间myts,并假设存在名为mylg的日志文件组(请参见第 13.1.15 节“ CREATE LOGFILE GROUP 语句”)。

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

您必须先使用ALTER TABLESPACE从 table 空间中删除所有数据文件,如下所示,然后才能将其删除:

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

mysql> DROP TABLESPACE myts;