フルスタックエンジニアのノウハウ
2021.01.14    2021.02.21

データベース操作の基礎を学ぼう!DELETE編

データベース操作の基礎を学ぼう!DELETE編

この記事の動画版はこちら

チャンネル登録お願いします!


今回は、データベース操作の基礎講座 第4回ということで、「DELETE文」の使い方を学んでいきましょう!




データベースの操作は、アプリケーションを作っていく上では必ず使っていくものになりますので

基礎的な部分からしっかり固めておきましょう!


DELETE文とは?


DELETE文を使うと、テーブルに登録されているデータを削除することが出来ます。




テーブルに登録されている全てのデータを一括で削除することも出来ますし、条件を指定して、特定のデータだけを削除することも出来ます。



DELETE文の基本


DELETE文は、このような書式になっています。


まず、DELETE FROMの後に、削除したいデータが登録されているテーブルの名前を指定します。





例えば、このような「商品(product)テーブル」があった場合、このテーブルに登録されているデータを削除したい時は、テーブル名に「product」と指定します。







このように、検索条件を何も指定しない場合は、テーブル内の全データが一括で削除されます。


これを、本番サーバーのデータベースで実行してしまうと、笑い事では済まないので、注意しましょう。


ちなみに、僕も過去に何度かやってしまったことがあります(^^;)



条件を指定する方法


削除するデータの検索条件を指定するには、SELECT文の時と同じように、WHERE句の後ろに、検索したい「カラム名」と「その条件」を指定します。


例えば、idカラムが「1」のデータだけを削除したい場合は、このようになります。






この辺りは、SELECT文やUPDATE文と全く同じ考え方ですね。



条件を件数で指定する方法


また、SELECT文で使用した「ORDER BY」や「LIMIT」といった指定方法を、DELETE文で使うことも出来ます。




ORDER BYというのは「データの並び順の指定」

LIMITは「取得する件数の指定」でしたね。



例えば、このように書くと「在庫数の少ない順」でデータを並び替えた上で、「上位から3件だけ」を削除するといったことが可能です。






TRUNCATEとの違い


なお、テーブルからデータを削除する命令としては「DELETE」の他に「TRUNCATE」という命令もあります。


TRUNCATEは、DELETEとは異なり、テーブル自体を一度削除してから再度作り直す命令になっており、DELETEのように条件を指定して特定のデータだけを削除するといったことは行えず、テーブル内の全データが一括削除されます。


その分、DELETEよりも処理が高速だったり、AUTO INCREMENTの値が初期値にリセットされたりと、テーブルのデータを完全に初期化したい時は、TRUNCATEの方が便利な場合もありますので覚えておきましょう。


TRUNCATEの書式はこのようになります。




TRUNCATEの後に対象のテーブル名を指定するだけですね。


ちなみに、データベース管理ツールであるphpMyAdminで、各テーブルの「空にする」というリンクをクリックした場合は、DELETEではなくTRUNCATEが実行されます。




物理削除と論理削除


DELETEやTRUNCATEを使って、実際にテーブルからデータを削除することを「物理削除」と言い

実際には削除は行わずにテーブルにデータを残したまま、そのデータにUPDATEで削除フラグを記録することで削除したと見なす方法を「論理削除」と言います。




論理削除では、実際にはデータは削除されないので、後から復元することも可能というメリットがあり、実際のアプリケーションでは結構用いられる方法です。


ただ、データが残り続けてしまうために、容量を圧迫してしまうというデメリットもあるため、どういうデータは論理削除にして、どういうデータは物理削除で良いか、ということをデータベース設計時にしっかり決めておくことが大切です。


また、論理削除したデータも、例えば対象ユーザーが退会したタイミングでまとめて物理削除するなど、一定期間保存したら物理削除するといった仕様になっていることも多いと思います。



まとめ


以上が、データを削除するための「DELETE」と「TRUNCATE」の使い方になります。


DELETE文は、データを一瞬にして削除する命令のため、操作ミスやコーディングのミスによって重要なデータを消失してしまう可能性もあるので、使用する際は慎重に行うようにしましょう。

また、データベースに直接DELETE文を実行する際は、検索条件が間違っていないかどうか、まず最初にSELECT文で実行して確認する癖を付けておくと安全です。


おすすめ記事