• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • DROP TABLESPACE语句

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

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

    UNDO必须指定在MySQL 8.0.14中引入的关键字以删除撤消表空间。只能CREATE UNDO TABLESPACE删除使用语法创建的撤消表空间。撤消表空间必须处于empty状态后才能删除。有关更多信息,请参见“撤消表空间”。

    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数据。每个表文件表空间的空间不会释放回操作系统。

    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状态后才能删除。有关更多信息,请参见“撤消表空间”。

    mysql> DROP UNDO TABLESPACE undo_003;
    

    NDB示例

    这个例子展示了如何删除一个NDBmyts具有命名的数据文件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;