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 テーブルがあります。
このテーブルの全データを、TRUNCATE TABLE を使って削除してみます。
TRUNCATE TABLE exam_results;
上のクエリーを実行して、exam_results テーブルの中身を確認します。
exam_results テーブルの全レコードが削除されています。
TRUNCATE TABLE 文の Response は 0 row(s) affected になっていますね。
AUTO_INCREMENT の値も確認してみると、1 にリセットされています。
AUTO_INCREMENT の現在の値の確認方法が知りたい方はこちらをご覧ください。
以上、MySQL で TRUNCATE TABLE を使ってテーブルの全データを削除する方法をご説明しました。