MySQL 8.0 リファレンスマニュアル


13.1.33 DROP TABLESPACE ステートメント

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

このステートメントは、CREATE TABLESPACE を使用して以前に作成されたテーブルスペースを削除します。 NDB および InnoDB ストレージエンジンでサポートされています。

undo テーブルスペースを削除するには、MySQL 8.0.14 で導入された UNDO キーワードを指定する必要があります。 CREATE UNDO TABLESPACE 構文を使用して作成された undo テーブルスペースのみを削除できます。 undo テーブルスペースは、削除する前に empty 状態である必要があります。 詳細は、セクション15.6.3.4「undo テーブルスペース」を参照してください。

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 を使用して明示的に削除する必要があります。

  • システムテーブルスペースと同様に、一般テーブルスペースに格納されているテーブルの切捨てまたは削除によって、新しい InnoDB データにのみ使用できる空き領域が一般テーブルスペース .ibd data file に内部的に作成されます。 file-per-table テーブルスペース用であるため、領域はオペレーティングシステムに解放されません。

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;

この例では、undo テーブルスペースの削除を示します。 undo テーブルスペースは、削除する前に empty 状態である必要があります。 詳細は、セクション15.6.3.4「undo テーブルスペース」を参照してください。

mysql> DROP UNDO TABLESPACE undo_003;

NDB の例

この例では、最初にテーブルスペースを作成した後に mydata-1.dat という名前のデータファイルを持つ NDB テーブルスペース myts を削除する方法を示し、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;

関連キーワード:  ステートメント, テーブル, CREATE, DROP, スペース, TABLE, 削除, TABLESPACE, InnoDB, サブクエリー