保存期間とは、持ってよい長さのこと
保存期間とは、データを持ち続けてよい長さのことです。目的が終わったデータは、決めた日が来たら消します。
消す日を決めていない表は、いつまでも増え続けます。この回では、期限を過ぎた行を SQL で見つけ、安全に消すやり方を学びます。
このレッスンのゴール
メモ
保存期間を決め、期限を過ぎた行を SQL で見つけて消せる。
重要な言葉
| ことば | いみ | れい |
|---|---|---|
| 保存期間 | データを持ち続けてよい長さ | 解決から2年 |
| 基準日 | 期間を数え始める日 | 解決した日 |
| 物理削除 | 行を本当に取り除くこと | |
| 論理削除 | 行は残し、消したという印だけを付けること | |
| バックアップ | 壊れたときのために取っておく、データの写し |
学生が入力するセルは、このプレビューでは空白です。
保存期間は、目的と基準日で決める
保存期間は、目的から決めます。問い合わせへの対応が終われば、その記録を持つ理由も薄れます。
期間を数え始める日が基準日です。解決した日、最後に使った日、契約が終わった日などから選びます。
決めた期間は、文書に書いておきます。守っている証拠にもなります。
例: 組織が決める保存期間
| データ | 基準日 | 期間の例 |
|---|---|---|
| 問い合わせの記録 | 解決した日 | 2年 |
| 会員の登録情報 | 最後に使った日 | 3年 |
| 採用に応募した人の書類 | 結果を伝えた日 | 6か月 |
学生が入力するセルは、このプレビューでは空白です。
期限を過ぎた行は、日付の比較で探す
今日が 2026年10月26日で、期間が2年なら、基準日が 2024年10月26日より前の行が、期限切れです。
日付は YYYY-MM-DD の形で書けば、文字として比べても、日の前後が正しく分かります。
消す前に、まず SELECT で探します。ラボで、自分用の顧客の写しを作って練習しましょう。
証明書を受け入れる設定
printf '[client]\nssl-verify-server-cert=0\n' > ~/.my.cnfここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
クライアント用の短い名前
alias db='mariadb -h db -u student -pstudent -t -e'ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
自分のデータベースを作る
db "CREATE DATABASE IF NOT EXISTS student_privacy"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
古い写しを捨てる
db "DROP TABLE IF EXISTS student_privacy.contacts"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
顧客の写しを作る
db "CREATE TABLE student_privacy.contacts AS SELECT id, first_name, email, joined_on FROM shop.customers"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
1段目: 期限切れの行を数える
db "SELECT COUNT(*) AS past_retention FROM student_privacy.contacts WHERE joined_on < '2022-01-01'"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
2段目: 同じ条件で消す
db "DELETE FROM student_privacy.contacts WHERE joined_on < '2022-01-01'"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
3段目: もう一度数える
db "SELECT COUNT(*) AS past_retention FROM student_privacy.contacts WHERE joined_on < '2022-01-01'"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
よくある間違い
注意
登録した日が古い行を消せばよいと思いがちです。5年前に登録しても、先週まで使っていた人のデータは、まだ使われています。基準日は、目的に合わせて選びます。使っている間は、期間を数え始めません。
消したつもりでも、バックアップに残る
行を物理的に消しても、昨日のバックアップには、まだ載っています。消したデータは、バックアップが古くなって捨てられた日に、本当に消えます。
だから、バックアップにも保存期間を決めます。期間は短いほど安全ですが、壊れたときに戻せる日数も減ります。
例: 2種類の消し方
| 方法 | 行はどうなるか | 向いている場面 |
|---|---|---|
| 物理削除 | 表から取り除かれる | 期限が来て、もう要らないとき |
| 論理削除 | 残るが、消した印が付く | 少しの間、取り戻せるようにしたいとき |
学生が入力するセルは、このプレビューでは空白です。
試す: 期限を過ぎた問い合わせ
-- 解決から2年(2024-10-26 より前)たった問い合わせを探します。
SELECT id, topic, closed_on FROM tickets
WHERE closed_on < '2024-10-26'
ORDER BY id;
-- 6番の問い合わせは出ません。まだ解決していないからです。
試す: まだ閉じていない行
-- まだ閉じていない問い合わせは、期限を数えません。先に確かめます。
SELECT id, topic, opened_on FROM tickets
WHERE closed_on IS NULL
ORDER BY id;
-- 開いたまま3年以上たつ行は、どれですか。