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 拡張子です。