トランザクションを理解する
注文や振替が途中だけ成立すると何が困るのかを出発点に、トランザクションとACIDを学びます。確定と取消しの違いを具体的な残高・在庫で確かめます。
この単元で学ぶこと
- 業務上の一まとまりからトランザクションの境界を決める
- COMMITとROLLBACKを区別し、更新後の値を求める
- ACIDの各性質と守る対象を説明する
- 同時実行と障害復旧で必要な条件を見分ける
本文解説
一つの仕事をどこまでまとめるか トランザクションは、関連するデータの処理を一つの確定・取消しの単位として扱う仕組みです。商品の注文では、注文行を作るだけでなく在庫も減らします。片方だけ成功した状態を残したくなければ、この二つの更新を同じ単位にします。表が違っても、同じデータベースの一つのトランザクションに含められます。
振替で追う途中状態 Aに8,000円、Bに2,000円あり、1,500円をAからBへ移します。成功後はAが6,500円、Bが3,500円です。Aを減らした後にBを増やせず終わると、合計が減ったように見えます。正常なら両方を確定し、成立しなければ途中の更新も取り消すことで、振替という一つの仕事を守ります。
コミットは確定、ロールバックは取消し 正常に終わった更新はCOMMITで確定します。まだ確定していない同じトランザクションの更新を取り消すのがROLLBACKです。在庫10個を3個減らしたなら、コミット後は7個、全体のロールバック後は10個です。他の処理による更新はないとして考えます。すでに確定して終了した処理を後からROLLBACKで消すことはできません。
ACIDのAとC 原子性(Atomicity)は、一式の更新を全部行うか全部取り消すかにそろえる性質です。一貫性(Consistency)は、重複禁止など定めた整合性条件を処理の前後で維持する性質です。業務上の条件をDBMSが自動で推測するわけではないため、制約やアプリの検査として表現します。誤った振替先への一式の更新が確定することもあり、入力内容の確認は別に必要です。
ACIDのIとD 独立性・分離性(Isolation)は、同時に進む処理の干渉を制御する性質です。二人が同じ在庫を操作する場合はロックなどが役立ちます。耐久性・永続性(Durability)は、確定した結果を後の障害でも保持する性質です。ログの保存や復旧の仕組みが支えます。ただし装置そのものを失う事故への備えも必要で、バックアップが不要になるという意味ではありません。
同時注文では確認と更新を考える 残り1個を二人が別々に見て、二人とも購入できると判断する場合を考えます。検索した時点の値は、後の更新時点まで固定されるとは限りません。在庫を減らせる条件の検査と実際の更新を、適切な競合制御の下で組み合わせます。トランザクションという名前だけを付けても、競合制御や業務条件の実装を省略できません。
外部への操作は別の範囲 DB更新中に送信したメールは、DBをロールバックしても通常は取り消せません。外部の決済や通知は、同じDBトランザクションの対象ではないからです。成功通知はDBの確定結果に合わせ、外部処理との連携では失敗時の対応も決めます。画面に成功と表示した事実を、データが確定した証拠にしてはいけません。
境界を確認してから結果を読む 問題を解くときは、開始前の値、更新の順序、どこまでが同じトランザクションか、最後が確定か取消しかを読みます。自動コミットの環境では文ごとに確定することがあるため、複数更新を同じ単位にする設定を確かめます。すでに確定した誤入力を直すときは、訂正用の処理と記録の残し方を設計します。
図解
重要ポイント
- 更新を一体にする範囲と、確定・取消しの境界を先に確認する。
- ACIDは原子性・一貫性・独立性・耐久性で、守る対象が異なる。
- 制約、競合制御、障害復旧、外部連携もそれぞれ設計する。
間違えやすい点
- COMMIT済みの別トランザクションまでROLLBACKで戻ると考えない。
- 原子性を、すべての命令が物理的に同時実行される意味にしない。
- 単一DBの取消しで外部メールや決済も自動取消しされると考えない。
用語解説
- トランザクション
- 関連する処理を一つの確定・取消しの単位として扱うもの。
- コミット
- トランザクションの更新を正常終了として確定する操作。
- ロールバック
- 対象の未確定更新を取り消す操作。通常の全体取消しとセーブポイントへの部分取消しを区別する。
- 原子性
- 一式の更新を全部確定するか、全部取り消すかにそろえる性質。
- 一貫性
- 定めた整合性条件を満たす状態を処理の前後で維持する性質。
- 独立性
- 並行して進むトランザクション間の干渉を制御する性質。分離性ともいう。
- 耐久性
- コミットした結果を後の障害でも保持する性質。永続性ともいう。
関連教材
参考資料
教材データに登録された参考リンクです。リンク先の内容や更新日は提供元でご確認ください。
- https://www.ipa.go.jp/shiken/syllabus/gaiyou.html
- https://www.postgresql.org/docs/18/tutorial-transactions.html
- https://www.postgresql.org/docs/18/transaction-iso.html
- https://www.postgresql.org/docs/18/ddl-constraints.html
- https://www.postgresql.org/docs/18/sql-rollback.html
- https://www.sqlite.org/lang_transaction.html
- https://www.sqlite.org/atomiccommit.html
確認問題の出題・採点や学習履歴の保存にはログインが必要です。