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

MySQL MySQL

MySQLでテーブルのデータを全削除(初期化)する方法について書いています。
MySQLでテーブルのデータを全削除して、初期化するにはTRUNCATE TABLEを使うと良いです。

MySQLのバージョン8.0.32で、動作を検証しています。

こちらの公式ドキュメントに記載があります。

テーブルのデータを全て削除する

MySQLのTRUNCATE TABLEを使うと、テーブルのデータを全て削除してくれます。
TRUNCATE TABLEを使う時には、下記のように実行します。

TRUNCATE TABLE users;

このように実行すると、usersテーブルのデータを全て削除して、初期状態に戻してくれます。

例えば、下記のように3件のデータがusersテーブルに入っているときです。

mysql> SELECT * FROM users;
+----+---------+------+------------+
| id | name    | age  | birthday   |
+----+---------+------+------------+
|  1 | yasuaki |   34 | 1989-02-06 |
|  2 | taro    |   25 | 1998-01-01 |
|  3 | jiro    |   23 | 2000-01-01 |
+----+---------+------+------------+
3 rows in set (0.00 sec)

TRUNCATE TABLEを実行します。

mysql> TRUNCATE TABLE users;
Query OK, 0 rows affected (0.07 sec)

そしてusersテーブルに対して、もう一度SELECT文を実行すると、空になっていることが確認できます。

mysql> SELECT * FROM users;
Empty set (0.00 sec)

公式ドキュメントにも書いていましたが、「テーブルを削除して、再作成する」とのこと。
そのため、特に大きなテーブルの場合は高速に処理できるとのことです。

TABLEは省略可能

TABLEは省略することも可能です。
下記のようにTRUNCATEのみでも、同じように動作します。

TRUNCATE users;

DELETEとTRUNCATEの違い

DELETE文でも、WHEREで条件をつけない時には全てのデータが削除されます。
例えば、下記のように実行した時です。

DELETE FROM users;

DELETETRUNCATEとの違いは下記などです。

・テーブル自体を削除して作り直すので、`DELETE`よりも`TRUNCATE`の方が高速に削除できる。
・テーブルがロックされている場合は`TRUNCATE`は実行できない。
・`TRUNCATE`ではロールバックができない。
・`AUTO_INCREMENT`は初期値に戻る。
・`TRUNCATE`では`ON DELETE`トリガーが実行されない

詳細は公式ページの、下記の記事を確認してみてください。
13.2.2 DELETE ステートメント
13.1.37 TRUNCATE TABLE ステートメント

コメント

タイトルとURLをコピーしました