SQLトランザクション制御とは?ひとまとまりの作業を『全部やるか・全部やめるか』にするしくみ

公開: 更新: カテゴリ: テクノロジ系

30秒で結論

SQLトランザクション制御とは(全体像)

トランザクションは、いくつかの操作を1つのまとまりにして、「全部成功」か「全部なかったこと」のどちらかにするしくみ。中途半端な状態を残さないのがねらいだよー。

身近にたとえると、銀行振込。「Aさんの口座から引く」と「Bさんの口座に足す」は、両方そろって初めて意味がある。片方だけ成功してお金が消えたら困るよね。だから2つを1まとまりにして扱うのー。

押さえるのは、まとまりを確定するのがCOMMIT、取り消すのがROLLBACKということ。ここが試験でいちばん問われるよー。


詳しく:COMMIT・ROLLBACKとモードだけ覚えれば戦える

ここが記事の心臓部。まず操作の命令を見ていこーね。

トランザクションの主な命令

命令はたらき
BEGIN(開始)ここからひとまとまりにする、と宣言
COMMITまとまりを確定して保存する
ROLLBACKまとまりを取り消してなかったことにする
SAVEPOINT途中に「ここまで戻れる」目印を置く

ここで一番のひっかけが「ROLLBACKは保存済みのデータも消せる」という誤解。ROLLBACKで取り消せるのは、まだCOMMIT(確定)していない変更だけ。いったんCOMMITした内容は、ROLLBACKでは戻せないよー。

もう1つの要点が、確定のしかた(モード)

確定のモード

モード動き
自動コミット1つの文ごとに自動で確定(MySQLなどの初期設定)
明示モードBEGINからCOMMITまでを自分でまとめる

ここで2つめのひっかけが「どのデータベースでも自動で確定される」という思い込み。確定のしかたはデータベース製品によって違う(自動が初期のものもあれば、自分でCOMMITするものもある)ので、同じだと決めつけないのが大事だよー。

わかりやすく言い換えると

要するに、銀行振込でイメージするとラクだよー。

トランザクション … 「引き落とし」と「入金」を1まとまりにして、全部やるか全部やめるか

COMMIT … 両方うまくいったので確定して保存する

ROLLBACK … 途中で失敗したので、まとめてなかったことにする(確定前だけ戻せる)

つまり、「COMMITは確定・ROLLBACKは取り消し」「戻せるのは確定前だけ」、この2点が試験の急所なのー。


試験のツボ

🔴 一番出る:COMMITとROLLBACK

①COMMITはまとまりを確定して保存する

②ROLLBACKはまとまりを取り消してなかったことにする

🔴 次に出る:ROLLBACKで戻せる範囲

①ROLLBACKで取り消せるのは、まだCOMMITしていない変更だけ

②いったんCOMMITした内容はROLLBACKでは戻せない

🟡 押さえると安定:確定のモードとSAVEPOINT

①自動コミットと明示モードがあり、データベース製品で初期設定が違う

②SAVEPOINTは途中に「ここまで戻れる」目印を置くしくみ


よくある間違い

「ROLLBACKは確定済み(COMMIT済み)のデータも取り消せる」→ ✗  ROLLBACKで戻せるのは、まだCOMMITしていない変更だけ。

「どのデータベースでも必ず自動で確定される」→ ✗  確定のしかたは製品で違う。自分でCOMMITするものもある。

「COMMITとROLLBACKは同じ意味である」→ ✗  COMMITは確定して保存、ROLLBACKは取り消し。逆の働き。


試験での出題パターン

実際の問題でたしかめてみよう。

オリジナル問題1(COMMITとROLLBACK)

📝 オリジナル問題 1 COMMITとROLLBACK

トランザクションの命令に関する次の記述のうち、正しいものはどれか。

  1. COMMITもROLLBACKも、どちらもデータを必ず完全に削除する命令だとされているものである
  2. COMMITはまとまりを確定して保存し、ROLLBACKはまとまりを取り消してなかったことにする
  3. COMMITは画面を明るくし、ROLLBACKは画面を暗くする命令のことだとされているものである
  4. COMMITとROLLBACKはまったく同じ意味で、どちらも取り消しを行うものだとされている
データスラ
データスラ 解答・解説

解答は 2 だよー。

COMMITはまとまりを確定して保存ROLLBACKはまとまりを取り消してなかったことにする命令なのー。銀行振込で両方そろったらCOMMIT、ダメならROLLBACKだよー。

選択肢1の「必ず完全に削除」、選択肢3の「画面の明暗」、選択肢4の「同じ意味」はどれも誤りなのー。

選択肢判定理由
1削除する命令ではない
2確定がCOMMIT・取り消しがROLLBACK
3画面の明暗ではない
4逆の働きで同じではない

オリジナル問題2(ROLLBACKで戻せる範囲)

📝 オリジナル問題 2 ROLLBACKで戻せる範囲

ROLLBACKに関する次の記述のうち、正しいものはどれか。

  1. ROLLBACKは確定済み(COMMIT済み)のデータも自由に取り消せるものだとされているものだ
  2. ROLLBACKはデータベースを完全に初期状態へ戻す命令のことだとされているものである
  3. ROLLBACKで取り消せるのは、まだCOMMITしていない変更だけで、確定済みは戻せない
  4. ROLLBACKは画面の表示を1つ前に戻すだけの機能のことだとされているものである
データスラ
データスラ 解答・解説

解答は 3 だよー。

ROLLBACKで取り消せるのは、まだCOMMIT(確定)していない変更だけなのー。いったんCOMMITした内容は、ROLLBACKでは戻せないよー。

選択肢1の「確定済みも取り消せる」、選択肢2の「完全に初期状態へ」、選択肢4の「画面を1つ前に戻す」はどれも誤りなのー。

選択肢判定理由
1確定済みは戻せない
2初期状態へ戻す命令ではない
3確定前の変更だけ取り消せる
4画面の表示を戻す機能ではない

オリジナル問題3(確定のモード)

📝 オリジナル問題 3 確定のモード

確定(コミット)のモードに関する次の記述のうち、正しいものはどれか。

  1. 自動コミットと明示モードがあり、確定のしかたはデータベース製品によって違うことがある
  2. どのデータベースでも必ず自動で確定され、製品による違いはまったくないものだとされている
  3. 確定のしかたは画面の色で決まるもので、データベースとは無関係だとされているものである
  4. 確定はいつも手作業だけで行い、自動で確定される方式は存在しないものだとされている
データスラ
データスラ 解答・解説

解答は 1 だよー。

確定のしかたには、自動コミット(1文ごとに自動で確定)と明示モード(BEGINからCOMMITまで自分でまとめる)があって、データベース製品によって初期設定が違うのー。同じだと決めつけないのがポイントだよー。

選択肢2の「必ず自動・違いはない」、選択肢3の「画面の色で決まる」、選択肢4の「自動は存在しない」はどれも誤りなのー。

選択肢判定理由
1自動と明示があり製品で違う
2製品で違いがある
3画面の色では決まらない
4自動コミットは存在する

まとめ

押さえどころ

次に学ぶ


執筆: SikakuQuest編集部

勉強は、クエストになった。

資格の勉強を、冒険に変えるRPG学習アプリ

App Storeで見る