SQL難易度 標準

状況

本番 DB で、退会済みユーザーの古いログを DELETE で消す作業をする。BEGIN でトランザクションは開始済み。

COMMIT までの作業を正しい順番に並べてください。

正答

  • DELETE を実行する
  • 削除件数が控えた件数と一致するか確かめる
  • COMMIT する
  • 同じ WHERE 句で SELECT COUNT(*) し、件数を控える
正しい順番
  1. 同じ WHERE 句で SELECT COUNT(*) し、件数を控える
  2. DELETE を実行する
  3. 削除件数が控えた件数と一致するか確かめる
  4. COMMIT する

解説

削除の前に、DELETE と同じ WHERE 句で SELECT COUNT(*) を実行して対象件数を控える。DELETE の実行後に表示される変更件数がその数と一致すれば、条件の書き間違いが無いと判断できる。一致したときだけ COMMIT し、違えば ROLLBACK で戻す。DELETE の後に SELECT すると対象行はもう消えているので、比べる基準が無い。件数を確かめずに COMMIT すると、WHERE の誤りに気づいても取り消せない。

参考: www.sqlite.org

deletetransactionproduction

この問題を含む SQL のテストを制限時間つきで解く

SQLクイズへ