TRUNCATE [TABLE] tbl_name
        TRUNCATE
        TABLE
        はテーブルを完全に空にします。論理的には、これはすべての行を削除する
        DELETE
        ステートメントと同等ですが、いくつかの条件下では、違いがあります。
      
        InnoDB
        テーブルの場合、InnoDB
        は、テーブルを参照するいずれかの
        FOREIGN KEY
        制約が存在する場合に行を 1
        つずつ削除することによって
        TRUNCATE
        TABLE
        を処理します。FOREIGN
        KEY
        制約が存在しない場合、InnoDB
        は元のテーブルを削除し、同じ定義を持つ空のテーブルを作成することによって速い切り詰めを実行します。これは、1
        行ずつ削除するよりはるかに高速です。AUTO_INCREMENT
        カウンタは、FOREIGN KEY
        制約が存在するかどうかには関係なく、TRUNCATE
        TABLE によってリセットます。
      
        FOREIGN KEY
        制約がテーブルを参照する場合、InnoDB
        は行を 1
        つずつ削除し、各行で制約を処理します。FOREIGN
        KEY 制約で DELETE
        CASCADE が指定されている場合は、子
        (参照されている)
        テーブルからの行が削除され、切り詰められたテーブルは空になります。FOREIGN
        KEY 制約で
        CASCADE
        が指定されていない場合、TRUNCATE
        ステートメントは行を 1
        つずつ削除し、子によって参照されている親行を検出すると停止して、次のエラーを返します。
      
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`test`.`child`, CONSTRAINT `child_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `parent` (`id`))
        これは、WHERE
        節が指定されていない
        DELETE
        ステートメントと同じです。
      
        MySQL 5.1.32
        からは、TRUNCATE
        は、DROP TABLE
        とそれに続く CREATE
        TABLE として (つまり、DML ではなく DDL
        として)
        バイナリログおよびレプリケーションの目的に処理されます。これは、トランザクション遮断レベルによってステートメントベースのロギング
        (READ COMMITTED または
        READ UNCOMMITTED)
        が許可されていない
        InnoDB
        やその他のトランザクションストレージエンジンを使用している場合、STATEMENT
        または MIXED
        ロギングモードを使用しているときにステートメントがログおよび複製されなかったという事実によります。(Bug#36763) ただし、前に説明した方法で
        InnoDB
        を使用しているレプリケーションスレーブには引き続き適用されます。
      
        TRUNCATE
        TABLE
        によって影響を受ける数行は、DELETE
        ステートメントにマップされている場合にのみ正確です。
      
        その他のストレージエンジンの場合、MySQL
        5.1
        では、TRUNCATE
        TABLE は次のように
        DELETE
        とは異なります。
      
切り詰め操作はテーブルを削除して再作成するため、特に大きなテーブルの場合は、行を 1 つずつ削除するよりはるかに高速です。
切り詰め操作は、暗黙的なコミットを引き起こします。
セッションがアクティブなテーブルロックを保持している場合は、切り詰め操作を実行できません。
切り詰め操作は、削除された行数に対して、意味のある値を返しません。通常の結果は 「0 rows affected」 ですが、これは「情報がない」ものとして解釈してください。
            テーブルフォーマットファイルtbl_name.frmTRUNCATETABLE
            を利用して空のテーブルとして再作成することができます。
          
            テーブルハンドラは最後に利用された
            AUTO_INCREMENT
            値を記憶していませんが、また最初から数えます。通常はシーケンス値を再利用しない
            MyISAM と
            InnoDB
            にも同じことが言えます。
          
            パーティション化されたテーブルと共に利用されるときには、TRUNCATE
            TABLE
            はその分割を保管します。それは、パーティション定義
            (.par)
            ファイルは影響を受けませんが、データとインデックスファイルはドロップされ、再作成されるという意味です。
          
            テーブルの切捨てが
            DELETE
            を利用しないため、TRUNCATE
            ステートメントは ON
            DELETE トリガーを呼び出しません。
          
        MySQL 5.1.16
        の時点では、TRUNCATE
        TABLE には
        DROP
        権限が必要です。(MySQL 5.1.16
        より前のバージョンでは、DELETE
        権限が必要です。)
      

