トランザクションとACID特性
データベース
トランザクションは「全部やるか全部やらないか」の仕組み!銀行の振込を想像してみよう!
トランザクションとACID特性
簡単にいうと
トランザクションは「全部やるか全部やらないか」の仕組み!銀行の振込を想像してみよう!
① トランザクションの定義
トランザクションとは、データベースに対する一連の操作をひとまとめにした分割不可能な処理単位のことです。
典型的な例は銀行の振込処理です。
1. Aさんの口座から10万円を引く(UPDATE文)
2. Bさんの口座に10万円を加える(UPDATE文)
この2つの操作は必ずセットで実行される必要があります。もし操作1だけ実行されて操作2が失敗すると、10万円が「消えて」しまいます。トランザクションは、こうした不整合を防ぐために「両方とも成功するか、両方とも取り消すか」を保証する仕組みです。
トランザクションの終了には2つのパターンがあります。
- コミット(COMMIT): すべての操作が成功し、変更を確定する
- ロールバック(ROLLBACK): 途中でエラーが発生し、すべての変更を取り消して元に戻す
② ACID特性
信頼性の高いトランザクション処理が満たすべき4つの性質をACID特性と呼びます。頭文字を取ってACIDです。
| 特性 | 英語 | 意味 | 具体的な内容 |
|---|---|---|---|
| 原子性 | Atomicity | 全か無(All or Nothing) | トランザクション内の操作はすべて実行されるか、すべて取り消されるかのどちらか。中途半端な状態は許されない |
| 一貫性 | Consistency | データの矛盾なし | トランザクション前後でデータベースの整合性制約(NOT NULLや外部キーなど)が常に保たれる |
| 独立性 | Isolation | 他に影響されない | 複数のトランザクションが同時に実行されても、互いの中間状態が見えない。あたかも1つずつ順番に実行されたかのような結果になる |
| 持続性 | Durability | 障害でも保証 | コミット済みのトランザクションの結果は、システム障害(停電など)が発生しても失われない。ログやバックアップにより復旧可能 |
覚え方のコツは「A=全か無、C=矛盾なし、I=干渉なし、D=消えない」です。
③ 同時実行制御(排他制御)
複数のユーザーが同時にデータベースにアクセスするとき、データの整合性を保つための仕組みが同時実行制御(排他制御)です。最も一般的な方法がロック方式です。
| ロックの種類 | 別名 | 動作 | 他のトランザクションへの影響 |
|---|---|---|---|
| 共有ロック | Sロック(Shared Lock) | データを読み取るときにかける | 他のトランザクションも読み取りは可能だが、書き込みは不可 |
| 占有ロック | Xロック(Exclusive Lock) | データを書き込むときにかける | 他のトランザクションは読み取りも書き込みも不可 |
共有ロック同士は共存できます(複数のユーザーが同時に読める)。しかし、占有ロックがかかっているデータには、他のトランザクションは一切アクセスできません。
デッドロックとは、2つ以上のトランザクションが互いにロックしたデータの解放を待ち続けて永遠に処理が進まなくなる状態です。
たとえば、トランザクションAがテーブル1をロックしてテーブル2のロック解放を待ち、同時にトランザクションBがテーブル2をロックしてテーブル1のロック解放を待っている場合、両者とも永久に待ち続けることになります。
デッドロックが検出された場合、DBMSは一方のトランザクションを強制的にロールバックしてロックを解放し、もう一方を続行させます。
具体例
ACID特性を「銀行ATMの振込」で具体的に確認しましょう。
Aさん(残高50万円)からBさん(残高30万円)に10万円振り込む場面です。
原子性(Atomicity): Aさんから10万円引いた直後にシステムがダウンしても、Bさんへの10万円加算が完了していなければ、Aさんの引き落としも自動で取り消されます。「引いたけど足されない」という中途半端な状態にはなりません。
一貫性(Consistency): 振込前のAさん+Bさんの合計=80万円。振込後もAさん40万円+Bさん40万円=80万円。合計金額が変わらないことが保証されます。
独立性(Isolation): AさんがBさんに振込中、CさんがBさんの残高を照会しても、振込途中の不安定なデータは見えません。振込完了前なら30万円、完了後なら40万円と表示されます。
持続性(Durability): 振込が完了(コミット)した直後に停電が起きても、電源復旧後にはAさん40万円、Bさん40万円の状態が正しく残っています。ログファイルに記録されているためです。
試験のポイント
- ・要は「ACID=原子性(全か無)・一貫性(矛盾なし)・独立性(他に影響されない)・持続性(障害でも保証)」
- ・共有ロック=読み取り用(S)、占有ロック=書き込み用(X)
- ・デッドロック=互いにロック待ちで膠着する状態も頻出
独学で診断士合格を目指すなら
過去問演習・AI添削・テキストPDFまで
すべて揃ったプレミアムプランで合格を掴む!
予備校代の1/10以下で、独学の不安をまるごと解決
- 📝1次試験 過去問演習(全7科目・年度別)無制限プレミアム限定
- 🤖2次試験 AI添削(事例I〜IV・無制限)最適なフィードバックで実力アッププレミアム限定
- 📄科目別テキストPDFダウンロード。印刷して好きな使い方で学習できるプレミアム限定
- 🔖ブックマーク機能で苦手分野・何度も確認したい部分を管理プレミアム限定
- 📊学習記録・成績管理で自分の進捗を可視化プレミアム限定
プレミアムプラン
¥9,800(税込)
自動更新なし / 1年間有効
決済は Stripe(PCI-DSS準拠)で安全に処理されます。カード情報は当サービスに保存されません。