第4章 · トランザクションと同時実行制御·v1.0.0·更新 2026/7/10·読了目安 約14分
変更要約: 初版
4.1トランザクションとACID特性
この節の要点
トランザクションを構成する原子性(Atomicity)・一貫性(Consistency)・隔離性(Isolation)・耐久性(Durability)のACID特性と、BEGIN/COMMIT/ROLLBACKによるトランザクション境界の設計を学び、業務処理の整合性を守るための判断力を養います。
銀行の振込処理やECサイトの注文確定処理を設計するアプリケーション開発者にとって、「どこからどこまでを1つのトランザクションにまとめるか」というトランザクション境界の設計は、業務データの整合性を左右する重要な判断です。境界が狭すぎれば一部の更新だけが反映される不整合が生じ、広すぎればロック保持時間が延びて他の処理を待たせます。この節では、ACID特性という設計原理を踏まえてトランザクション境界をどう引くべきかを判断する視点を養います。
4.1.1ACID特性の4要素
- 原子性(Atomicity)=トランザクション内の一連の更新が「全て実行される」か「全く実行されない」かのいずれかになる性質。COMMITで確定し、途中で異常が起きればROLLBACKで全ての変更を取り消す。振込処理で「出金は成功したが入金は失敗した」という中途半端な状態を防ぐのが原子性の役割。
- 一貫性(Consistency)=トランザクションの実行前後でデータベースが定義された整合性制約(主キー・外部キー・検査制約等)を満たし続ける性質。隔離性(Isolation)=同時実行する複数のトランザクションが互いの中間状態を見えないようにし、あたかも1つずつ順番に実行されたかのような結果を保証する性質(次節・次々節で詳述)。耐久性(Durability)=COMMIT完了後の変更は、その直後に障害が発生してもディスク等の不揮発性記憶に確実に残り続ける性質。
4.1.2トランザクション境界とCOMMIT/ROLLBACK
- トランザクション境界=
BEGIN(トランザクション開始)からCOMMITまたはROLLBACKまでの一続きの処理範囲。境界内の更新は原子性により一体として扱われるため、業務上「意味のある1単位の処理」を境界にするのが基本原則——例えば振込処理なら「出金+入金」の両方を1つのトランザクションに含めなければ、一方だけが反映される不整合を防げない。 - 境界を必要以上に広く取ると、その間ロックが保持され続け(次節で詳述)他のトランザクションを待たせる時間が延びるため、「整合性を守るために必要な最小の範囲」に境界を絞ることが性能とのバランスを取る鍵になる。逆に境界を分割しすぎると、分割した複数のトランザクションの間で一貫性が保証されなくなり、業務要件を満たせなくなる。

