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.frm
が有効である限り、データやインデックス ファイルが破損しても、テーブルは TRUNCATE 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 拡張子です。