20
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SQL文 DROP・TRUNCATE・DELETE 全て削除命令だけど何が違う?

Last updated at Posted at 2021-09-29

##はじめに
どうも、未経験からエンジニア転職を目指しているもきおです。

実務案件にて一度MySQLのレコード(テーブルデータ)を削除してそこからまたレコードを入れ直す必要があり、SQLの削除命令を調べると色々とあるみたい。

ここで今回は3つの削除命令のそれぞれの違いをまとめていきたいと思います。

※キー制約に関しては以下の記事にまとめてるので良ければそちらもご覧ください!

※10/1日追記
TRUNCATEではロールバック出来なくなることを追記しました。

##DROP
テーブルを完全に削除

構文
DROP TABLE テーブル名;

スクリーンショット 2021-09-30 6.14.17.png

テーブル情報を跡形もなく消し去る命令文
テーブル設定(索引やキー制約)も削除
##TRUNCATE
テーブル内レコード(挿入したデータ)を全削除、オートインクリメントはリセット
テーブル情報は残ります。
注意:TRUNCATEするとロールバックはできなくなります。
###ロールバック(ROLLBACK)
実行されるとトランザクション中の処理が取り消され、トランザクション実行前の状態に戻りトランザクション前の状態に戻る事。
###トランザクション(TRANSACTION)
複数のSQL文をまとめて一つの処理としてまとめてデータベースへ反映させること。
一連の流れの途中で処理が止まってしまうと問題がある処理の際に利用される。

ここら辺は後日また記事にしたいと思います。

構文
TRUNCATE TABLE テーブル名;
#WHERE句で条件指定することはできない

スクリーンショット 2021-09-30 6.14.44.png

図のようにオートインクリメントはリセットされるので、TRUNCATEした後にまたデータを挿入するとid番号がリセットされた状態で割り振られます。

###ところでオートインクリメントって何?
PRIMARY KEYにオプションで付けることが出来る要素で、idを指定せず挿入してもid番号が自動的に割り当てられるオプションのこと。オートインクリメントを設定しておけばデータ挿入時にいちいちid=5とか記載しなくても自動でidが割り振られる便利なオプションです。

##DELETE
テーブル内レコードを全削除、または条件に一致したものだけ削除。
オートインクリメントリセットされない

構文
DELETE FROM テーブル名;

スクリーンショット 2021-09-30 6.15.20.png

オートインクリメントはリセットされないので図のようにid番号が引き継がれた状態で割り振られます。

##あとがき
いかがでしたでしょうか?
今回の実務ではDELETEだとidがどんどん蓄積されてしまうのでTRUNCATEが適していたと結論付けられました。
このUdemyを参考に作成させていただきました。

最後までご覧いただきありがとうございました!
この記事が少しでも良いと感じていただけましたらLGTMポチッとしていただけますと幸いです。

20
10
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?