MySQL でテーブルの全データを削除 (TRUNCATE TABLE)

ここでは MySQL で TRUNCATE TABLE を使ってテーブルの全データを削除する方法をご説明します。

サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを再生成しておいてください。

TRUNCATE TABLE 文と DELETE 文の違い

MySQL でテーブルの全データを削除するには TRUNCATE TABLE 文を使います。

DELETE 文を使ってもテーブルの全データを削除できますが、TRUNCATE TABLE 文と DELETE 文では次のような違いがあります。

  • TRUNCATE TABLE 文はテーブルを一度削除して作り直すので、1 行ずつ削除する DELETE 文よりずっと早くデータを削除できます。
  • TRUNCATE TABLE 文で削除すると AUTO_INCREMENT がリセットされます。
  • 外部キーで参照されているテーブルは TRUNCATE TABLE 文でデータを削除できません。
  • TRUNCATE TABLE 文を実行しても DELETE トリガーは実行されません。
  • TRUNCATE TABLE 文を実行した結果はデータが削除されても常に 0 rows affected になります。

大量のデータがあるテーブルになればなるほど TRUNCATE TABLE 文と DELETE 文のデータの削除にかかる時間に大きく差が出ます。

ですが、外部キーで参照されているテーブルの場合は、外部キーを一時的に削除するなりしない限り、DELETE 文しか使えません。

SET FOREIGN_KEY_CHECKS = 0; で外部キーを全部無効化することによって 外部キー参照されているテーブルに対して TRUNCATE TABLE 文を実行することもできます。

ですが、SET FOREIGN_KEY_CHECKS = 1; に戻しても、既存のデータは外部キー制約にそっているか再検証されません。

データの整合性がなくなる原因になるかもしれないので、お気をつけください。


TRUNCATE TABLE 文でテーブルの全データを削除する

テーブルの全レコードを削除する、TRUNCATE TABLE 文の構文は次の通りです。

TRUNCATE TABLE テーブル名;

TABLE というキーワードはオプショナルです。


次のような、外部キーで参照されていない exam_results テーブルがあります。

MySQL でテーブルの全データを削除 (TRUNCATE TABLE) 1


このテーブルの全データを、TRUNCATE TABLE を使って削除してみます。

TRUNCATE TABLE exam_results;

上のクエリーを実行して、exam_results テーブルの中身を確認します。

MySQL でテーブルの全データを削除 (TRUNCATE TABLE) 2

exam_results テーブルの全レコードが削除されています。

TRUNCATE TABLE 文の Response は 0 row(s) affected になっていますね。


AUTO_INCREMENT の値も確認してみると、1 にリセットされています。

MySQL でテーブルの全データを削除 (TRUNCATE TABLE) 3

AUTO_INCREMENT の現在の値の確認方法が知りたい方はこちらをご覧ください。

MySQL で現在の AUTO_INCREMENT の値を確認する


以上、MySQL で TRUNCATE TABLE を使ってテーブルの全データを削除する方法をご説明しました。

© 2024 MySQL 入門