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
ステートメントは失敗します。
は、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
システムテーブルスペースと同様に、一般テーブルスペースに格納されているテーブルの切捨てまたは削除によって、新しい
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;