はじめに
論理削除を勉強したので備忘録も兼ねて本記事を作成しました。
DBからのデータの削除方法として、論理削除と物理削除があります。
本記事では論理削除がどういったものかMySQL環境でクエリを使用し実際に試しながら確認していきます。
論理削除とは?
論理削除とはDBからデータを完全に削除する代わりに、そのデータを 削除済み
とマークする削除方法の事。
データは削除しないのでDB上にデータは存在しますが、任意の削除フラグを用いて対象のデータは削除されているもの判断します。
物理削除とは?:DBから完全にデータを削除するデータの復元が不可能な削除方法
メリデメ
-
メリット:
データの復元が容易なところ。DB上からデータを消していないので、データを復元し過去のデータを参照できる。 -
デメリット:
物理削除しないためデータはDB上に残り続け、その分DBの容量を取ってしまうところ。また、データを取得する際に削除フラグをクエリに加える必要がでてくるため、クエリの複雑化が考えられます。
論理削除をやってみる
実際にMySQL環境でクエリを使ってデータの論理削除をやってみます。
DBのテーブルに削除フラグ( is_deleted
)のカラムを設けたテーブルを作成してみます。
is_deleted
が 1
または true
の場合に削除済みとみなします。
-- 例: テーブル定義
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100),
is_deleted BOOLEAN DEFAULT FALSE
);
INSERTでデータをいくつかテーブルに追加します。
INSERT INTO users (name, email) VALUES ('tarou', 'tarou@example~~');
INSERT INTO users (name, email) VALUES ('Bob', 'Bob@example~~');
INSERT INTO users (name, email) VALUES ('hogesan', 'hogesan@example~~');
テーブルの状態
id | name | is_deleted | |
---|---|---|---|
1 | tarou | tarou@example~~ | FALSE |
2 | Bob | Bob@example~~ | FALSE |
3 | hogesan | hogesan@example~~ | FALSE |
tarou
のデータだけis_deleted フラグを TRUE に設定し削除フラグを更新します。
UPDATE users SET is_deleted = TRUE WHERE name = 'tarou';
テーブルの状態
id | name | is_deleted | |
---|---|---|---|
1 | tarou | tarou@example~~ | TRUE |
2 | Bob | Bob@example~~ | FALSE |
3 | hogesan | hogesan@example~~ | FALSE |
論理削除されたデータを確認します。
論理削除したデータを復元する際には、UPDATEで再度更新します。
SELECT * FROM users WHERE is_deleted = TRUE;
id | name | is_deleted | |
---|---|---|---|
1 | tarou | tarou@example~~ | TRUE |
論理削除されていないデータを表示します。
SELECT * FROM users WHERE is_deleted = FALSE;
id | name | is_deleted | |
---|---|---|---|
2 | Bob | Bob@example~~ | FALSE |
3 | hogesan | hogesan@example~~ | FALSE |
今回は削除フラグとしてTRUE、FALSEを使用しましたが、他にも削除フラグとしてデータを論理削除した日付を削除フラグとして記録するやり方もあるようです。