MySQLでDELETE(レコード削除)
更新日 : 2019年07月10日
INSERT・SELECT・UPDATEまでレコードの処理を行いました。
最後にレコード削除のためのDELETEについて学びます。
デリート文の書式
まずは書式から見ていきます。
DELETE FROM データベース名.テーブル名 WHERE 条件式;
UPDATE文と同様にWHERE
句がないとテーブル内のレコードはすべて削除されてしまうので注意しましょう。
データベース名もINSERTなどと同様に省略可能です。
実際にレコードを削除してみる
INSERT・SELECT・UPDATEの記事で使用しているテーブルを利用して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型で定義してあげた上で、そのカラムに日時データが入っているレコードは削除されているとみなす方法もあります。
カラム名などはもちろん他のカラム名でも大丈夫です。削除判定をするためのカラムだということがパッと見てわかるようなカラム名にしましょう。
このような削除済みレコードとみなす削除の方法を論理削除と言います。
実際のシステムの運用ではこの論理削除がよく利用されるので、覚えておきましょう。
タグ
-
前の記事
MySQLでUPDATE(レコード更新)
-
次の記事
MySQLの内部結合