DROP TABLESPACE语句
DROP [UNDO ]TABLESPACE tablespace_name [ENGINE [=] engine_name]
该语句删除先前使用创建的表空间CREATE TABLESPACE
。NDB
和InnoDB
存储引擎支持它。
UNDO
必须指定在MySQL 8.0.14中引入的关键字以删除撤消表空间。只能CREATE UNDO TABLESPACE
删除使用语法创建的撤消表空间。撤消表空间必须处于empty
状态后才能删除。有关更多信息,请参见“撤消表空间”。
ENGINE
设置使用表空间的存储引擎,其中engine_name
是存储引擎的名称。当前,值InnoDB
和NDB
被支持。如果未设置,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
数据。每个表文件表空间的空间不会释放回操作系统。
InnoDB示例
本示例演示如何删除InnoDB
常规表空间。常规表空间ts1
是用单个表创建的。在删除表空间之前,必须删除表。
mysql>CREATE TABLESPACE `ts1`ADD DATAFILE 'ts1.ibd'Engine =InnoDB; mysql>CREATE TABLE t1 (c1 INTPRIMARY KEY )TABLESPACE ts1Engine =InnoDB; mysql>DROP TABLE t1; mysql>DROP TABLESPACE ts1;
本示例演示删除撤消表空间。撤消表空间必须处于empty
状态后才能删除。有关更多信息,请参见“撤消表空间”。
mysql>DROP UNDO TABLESPACE undo_003;
NDB示例
这个例子展示了如何删除一个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;