INSERT・SELECT・UPDATEまでレコードの処理を行いました。 最後にレコード削除のためのDELETEについて学びます。

MySQLでDELETE(レコード削除)

3年以上前に更新されました。情報が古い可能性があります。
更新日 : 2019年07月10日

INSERTSELECTUPDATEまでレコードの処理を行いました。

最後にレコード削除のためのDELETEについて学びます。

デリート文の書式

まずは書式から見ていきます。

DELETE FROM データベース名.テーブル名 WHERE 条件式;

UPDATE文と同様にWHERE句がないとテーブル内のレコードはすべて削除されてしまうので注意しましょう。

データベース名もINSERTなどと同様に省略可能です。

実際にレコードを削除してみる

INSERTSELECTUPDATEの記事で使用しているテーブルを利用してDELETE文を実行してみましょう。

今回はidが2と一致しているレコードを削除してみます。

DELETE FROM users WHERE id = 2;

phpMyAdminで実行する場合、レコードを本当に削除するかどうか確認されますが、OKを押して実行してみましょう。

レコード削除の実用性

今回レコード削除のSQLを行いました。

DELETEを実行するとデータが本当に無くなります。これを物理削除と言います。

実際のWEBアプリケーションなどを稼働させていると、データベースのデータを実際に削除させるのはリスクが高いです。削除したデータが再び必要になる可能性などがありますよね。

そのため、RDBの削除では物理削除はあまり使われません。
どのようにレコードを削除するのが理想的でしょうか。

正解は、「削除済みレコードとみなす」です。

どういうことかというと、テーブルのカラム定義時にis_deletedというカラムを定義しておきます。このカラムには0または1というフラグ情報のみを入れるようにしてしまいます。

削除していないレコードは「0」を入れ、削除済みとみなすレコードは「1」を入れておきます。

削除していないレコードを読み込む際にはWHERE句にてWHERE is_deleted = '0' AND その他の条件式とすることで削除済みではなくさらに他の条件のレコードも取得することができます。

また、論理削除したいレコードはUPDATE文でis_deletedカラムを1にするように更新してあげればOKです。

あるいはdeleted_at等のカラム名で、Datetime型で定義してあげた上で、そのカラムに日時データが入っているレコードは削除されているとみなす方法もあります。

カラム名などはもちろん他のカラム名でも大丈夫です。削除判定をするためのカラムだということがパッと見てわかるようなカラム名にしましょう。

このような削除済みレコードとみなす削除の方法を論理削除と言います。

実際のシステムの運用ではこの論理削除がよく利用されるので、覚えておきましょう。