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;
DELETE
とTRUNCATE
との違いは下記などです。
・テーブル自体を削除して作り直すので、`DELETE`よりも`TRUNCATE`の方が高速に削除できる。
・テーブルがロックされている場合は`TRUNCATE`は実行できない。
・`TRUNCATE`ではロールバックができない。
・`AUTO_INCREMENT`は初期値に戻る。
・`TRUNCATE`では`ON DELETE`トリガーが実行されない
・テーブルがロックされている場合は`TRUNCATE`は実行できない。
・`TRUNCATE`ではロールバックができない。
・`AUTO_INCREMENT`は初期値に戻る。
・`TRUNCATE`では`ON DELETE`トリガーが実行されない
詳細は公式ページの、下記の記事を確認してみてください。
・13.2.2 DELETE ステートメント
・13.1.37 TRUNCATE TABLE ステートメント
コメント