状況
本番 DB で、退会済みユーザーの古いログを DELETE で消す作業をする。BEGIN でトランザクションは開始済み。
COMMIT までの作業を正しい順番に並べてください。
正答
- DELETE を実行する
- 削除件数が控えた件数と一致するか確かめる
- COMMIT する
- 同じ WHERE 句で SELECT COUNT(*) し、件数を控える
正しい順番
- 同じ WHERE 句で SELECT COUNT(*) し、件数を控える
- DELETE を実行する
- 削除件数が控えた件数と一致するか確かめる
- COMMIT する
解説
削除の前に、DELETE と同じ WHERE 句で SELECT COUNT(*) を実行して対象件数を控える。DELETE の実行後に表示される変更件数がその数と一致すれば、条件の書き間違いが無いと判断できる。一致したときだけ COMMIT し、違えば ROLLBACK で戻す。DELETE の後に SELECT すると対象行はもう消えているので、比べる基準が無い。件数を確かめずに COMMIT すると、WHERE の誤りに気づいても取り消せない。
参考: www.sqlite.org
この問題を含む SQL のテストを制限時間つきで解く
SQLクイズへ