初めまして、香取です。
今年新卒で入社して、ソリューション案件と社内システムの開発をやらせて頂いています。
データを削除するときのTRUNCATEとDELETEの違いについて書こうと思います。
リリース前のテストデータを削除する場合などでテーブルデータを全て削除したい時があります。
あるテーブルの全てのデータを削除する場合に以下の方法があると思います。
TRUNCATE文
1 |
TRUNCATE TABLE table_name; |
DELETE文
1 |
DELETE FROM table_name; |
■TRUNCATE
1 2 3 |
・TRUNCATEではDROP TABLEを行った上で再度同じテーブルを作成する ・AUTO_INCREMENTが設定されている場合はAUTO_INCREMENTの値は初期化される ・ROLLBACKできない |
■DELETE
1 2 3 |
・DELETEはTABLEデータを一つ一つ削除する ・DELETEの場合はデータが削除されるだけでAUTO_INCREMENTの値は初期化されない ・ROLLBACKできる |
DELETE文ではデータを一つ一つ削除するのに対しTRUNCATE文では
1 |
DROP TABLE table_name; |
を行い、再度同じテーブルを作成するのでTRANCATEの方が高速です。
しかし、ログの取得やインデックス処理を行わないためデータを復元することが出来ません。
TRUNCATEだとAUTO_INCREMENTの値も削除されるが、DELETEだと保持されます。
■AUTO_INCREMENT
AUTO_INCREMENTだけを初期化したいのであれば、
以下のようにします。
1 |
ALTER TABLE table_name auto_increment = 1; |
リリース前のテストデータを削除するだけなら得られる結果に大差はないように感じますが
TRUNCATEとDELETEではこれだけ違いがあるようです。
社内システムを開発したり、ソリューション案件をやらせて頂いてます。 学んだことを自分の言葉で発信していこうと思います。