DROP [UNDO] TABLESPACE tablespace_name
此语句用于删除之前使用 CREATE TABLESPACE
语句创建的表空间。它受 NDB
和 InnoDB
存储引擎支持。
必须指定 UNDO
关键字才能删除撤消表空间。只有使用 CREATE UNDO TABLESPACE
语法创建的撤消表空间才能删除。撤消表空间必须处于 空
状态才能删除。有关更多信息,请参阅 第 17.6.3.4 节,“撤消表空间”。
在 MySQL 中是区分大小写的标识符。tablespace_name
对于 InnoDB
通用表空间,在执行 DROP TABLESPACE
操作之前,必须先从表空间中删除所有表。如果表空间不为空,则 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 示例
此示例演示如何在创建名为 myts
的 NDB
表空间(其数据文件名为 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';
mysql> DROP TABLESPACE myts;