##はじめに
どうも、未経験からエンジニア転職を目指しているもきおです。
実務案件にて一度MySQLのレコード(テーブルデータ)を削除してそこからまたレコードを入れ直す必要があり、SQLの削除命令を調べると色々とあるみたい。
ここで今回は3つの削除命令のそれぞれの違いをまとめていきたいと思います。
※キー制約に関しては以下の記事にまとめてるので良ければそちらもご覧ください!
※10/1日追記
TRUNCATEではロールバック出来なくなることを追記しました。
##DROP
テーブルを完全に削除
DROP TABLE テーブル名;
テーブル情報を跡形もなく消し去る命令文
テーブル設定(索引やキー制約)も削除
##TRUNCATE
テーブル内レコード(挿入したデータ)を全削除、オートインクリメントはリセット
テーブル情報は残ります。
注意:TRUNCATEするとロールバックはできなくなります。
###ロールバック(ROLLBACK)
実行されるとトランザクション中の処理が取り消され、トランザクション実行前の状態に戻りトランザクション前の状態に戻る事。
###トランザクション(TRANSACTION)
複数のSQL文をまとめて一つの処理としてまとめてデータベースへ反映させること。
一連の流れの途中で処理が止まってしまうと問題がある処理の際に利用される。
ここら辺は後日また記事にしたいと思います。
TRUNCATE TABLE テーブル名;
#WHERE句で条件指定することはできない
図のようにオートインクリメントはリセットされるので、TRUNCATEした後にまたデータを挿入するとid番号がリセットされた状態で割り振られます。
###ところでオートインクリメントって何?
PRIMARY KEYにオプションで付けることが出来る要素で、idを指定せず挿入してもid番号が自動的に割り当てられるオプションのこと。オートインクリメントを設定しておけばデータ挿入時にいちいちid=5とか記載しなくても自動でidが割り振られる便利なオプションです。
##DELETE
テーブル内レコードを全削除、または条件に一致したものだけ削除。
オートインクリメントリセットされない
DELETE FROM テーブル名;
オートインクリメントはリセットされないので図のようにid番号が引き継がれた状態で割り振られます。
##あとがき
いかがでしたでしょうか?
今回の実務ではDELETEだとidがどんどん蓄積されてしまうのでTRUNCATEが適していたと結論付けられました。
このUdemyを参考に作成させていただきました。
最後までご覧いただきありがとうございました!
この記事が少しでも良いと感じていただけましたらLGTMポチッとしていただけますと幸いです。