クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

データの保存期間と削除

このレッスンのあとで: 保存期間を決め、期限を過ぎた行を SQL で見つけて消せる。

55分のレッスンコマンド8件MySQL と phpMyAdmin のラボ:ショップのデータベースで SQL を練習する

保存期間とは、持ってよい長さのこと

保存期間とは、データを持ち続けてよい長さのことです。目的が終わったデータは、決めた日が来たら消します。

消す日を決めていない表は、いつまでも増え続けます。この回では、期限を過ぎた行を 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種類の消し方

方法行はどうなるか向いている場面
物理削除表から取り除かれる期限が来て、もう要らないとき
論理削除残るが、消した印が付く少しの間、取り戻せるようにしたいとき

学生が入力するセルは、このプレビューでは空白です。

試す: 期限を過ぎた問い合わせ

コード: sql
-- 解決から2年(2024-10-26 より前)たった問い合わせを探します。
SELECT id, topic, closed_on FROM tickets
WHERE closed_on < '2024-10-26'
ORDER BY id;
-- 6番の問い合わせは出ません。まだ解決していないからです。

試す: まだ閉じていない行

コード: sql
-- まだ閉じていない問い合わせは、期限を数えません。先に確かめます。
SELECT id, topic, opened_on FROM tickets
WHERE closed_on IS NULL
ORDER BY id;
-- 開いたまま3年以上たつ行は、どれですか。

このラボとソースについて: MySQL と phpMyAdmin のラボ:ショップのデータベースで SQL を練習する

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。