TRUNCATE [TABLE] tbl_name
TRUNCATE TABLE
はテーブルを完全に空にします。論理的には、これは全ての行を削除する
DELETE
ステートメントと同等ですが、いくつかの条件下では、違いがあります。
もしテーブルを参照する外部キー制約があれば、InnoDB
テーブルに対しては、TRUNCATE TABLE
が DELETE
にマップされ、そうでなければ、高速切断(テーブルのドロップと再作成)が利用されます。外部キー制約の有無に関わらず、AUTO_INCREMENT
カウンタが TRUNCATE TABLE
によってリセットされます。
その他のストレージ エンジンに対しては、MySQL
5.1
の中では次のような方法で、TRUNCATE
TABLE
と DELETE
が異なっています。
切り捨て操作は、テーブルをドロップ、再作成します。それは、行を1つ1つ削除するよりも処理が速くできます。
切り捨て操作はトランザクション セーフではありませんので、実行中のトランザクションやテーブル ロックの途中で行おうとするとエラーが発生します。
削除された行数は返されません。
テーブル フォーマット ファイル
が有効である限り、データやインデックス
ファイルが破損しても、テーブルは
tbl_name
.frmTRUNCATE TABLE
を利用して空のテーブルとして再作成する事ができます。
テーブル ハンドラは最後に利用された
AUTO_INCREMENT
値を記憶していませんが、また最初から数えます。通常はシーケンス値を再利用しない
MyISAM
と InnoDB
にも同じ事が言えます。
パーティション
テーブルと共に利用される時には、
TRUNCATE TABLE
はその分割を保管します。それは、パーティション定義(.par
)ファイルは影響を受けませんが、データとインデックス
ファイルはドロップされ、再作成されるという意味です。
テーブルの切捨てが DELETE
を利用しない為、TRUNCATE
ステートメントは ON DELETE
トリガを呼び出しません。
TRUNCATE TABLE
は、MySQL 5.1.16
以降から DROP
権限を必要とします。(5.1.16 以前では
DELETE
権限を必要としています。
TRUNCATE TABLE
は MySQL
に導入されたオラクル SQL 拡張子です。