トランザクション
まず結論
トランザクションは「一連の処理を一つの単位として扱う」仕組みです。ACID特性(原子性・一貫性・独立性・永続性)の4つの性質が試験の最頻出テーマです。銀行振込のように「送金と入金は必ずセット」というイメージで理解しましょう。
ACID特性(必須暗記)
A — 原子性(Atomicity)
トランザクション内の処理は全て成功か全て失敗(中途半端な状態にならない)。COMMITまたはROLLBACK。
C — 一貫性(Consistency)
トランザクション前後でデータの整合性が保たれる(制約に違反する状態にならない)。
I — 独立性(Isolation)
複数のトランザクションが同時実行されても互いに影響しない(他のTX途中状態は見えない)。
D — 永続性(Durability)
COMMITされたトランザクションの結果は障害が発生しても永続する(ログで復旧)。
COMMIT と ROLLBACK
-- 銀行振込の例(AからBへ1万円送金)
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 10000 WHERE id = 'A';
UPDATE accounts SET balance = balance + 10000 WHERE id = 'B';
COMMIT; -- 全て成功 → 確定
-- 途中でエラーが発生した場合
ROLLBACK; -- 全ての変更を取り消す
原子性の意味:「Aから引き落とし」と「Bへ入金」は必ずセット。どちらか片方だけ成功することは許されない。ROLLBACKで最初の状態に戻す。
排他制御とロック
共有ロック(読み取りロック)
SELECT時に取得。他のトランザクションも読み取り可能。書き込みは不可。
排他ロック(書き込みロック)
UPDATE/INSERT/DELETE時に取得。他のトランザクションは読み取りも書き込みも不可。
デッドロック:TXAがリソース1をロックしてリソース2を待ち、TXBがリソース2をロックしてリソース1を待つ「待ち合い」状態。DBMSが検出して一方をROLLBACKする。
TXA: リソース1ロック → リソース2を待つ...
TXB: リソース2ロック → リソース1を待つ...
→ 永遠に待ち続ける(デッドロック)
TXB: リソース2ロック → リソース1を待つ...
→ 永遠に待ち続ける(デッドロック)
🎯 試験での出方
- 「ACID特性の○○は何を意味するか」→ 4つを英語名と日本語名と意味でセットで覚える
- 「COMMITとROLLBACKの違い」→ COMMIT=確定、ROLLBACK=取り消し
- 「デッドロックとは」→ 2つのTXが互いに相手のロックを待つ状態
- 「排他ロックと共有ロックの違い」→ 読み取り可否の違い
⚠️ よくある間違い
- 「原子性はデータを小さく分割すること」→ ✗ 原子性(Atomicity)は「全成功か全失敗」のこと
- 「ROLLBACKはCOMMIT後も使える」→ ✗ COMMIT後は永続化されROLLBACKできない。COMMIT前の未確定状態でのみ使える
- 「デッドロックはシステムが止まる」→ △ DBMSがデッドロックを検出して一方のTXをROLLBACKして解決する
✍️ 確認クイズ
Q1. ACID特性の「原子性(Atomicity)」の説明として正しいものはどれか。
✅ 正解は②。原子性(Atomicity)はトランザクション内の処理が分割不可能な1つの単位として扱われ、一部だけ成功という状態が起きないことを保証します。
Q2. トランザクション処理でデータの変更を取り消すために使うコマンドはどれか。
✅ 正解は②。ROLLBACKはトランザクション開始以降の全変更を取り消してトランザクション開始前の状態に戻します。COMMITは変更を確定(永続化)します。
Q3. デッドロックが発生する状況として正しいものはどれか。
✅ 正解は②。デッドロックはTXAがリソース1をロックしてリソース2を待ち、TXBがリソース2をロックしてリソース1を待つ「循環待ち」状態。DBMSが検出して一方をROLLBACKします。
Q4. ACID特性の「独立性(Isolation)」が保証することはどれか。
✅ 正解は②。独立性(Isolation)は複数のトランザクションが同時実行されても互いに干渉しないことを保証します。あるトランザクションが処理中のデータ(コミット前)は、他のトランザクションには見えないようにします。コミット後の永続性はDurability(永続性)です。
Q5. 共有ロックと排他ロックの組み合わせで正しいものはどれか。
✅ 正解は②。共有ロック(読み取りロック)はSELECT時に取得し、他も読めるが書き込みは不可。排他ロック(書き込みロック)はUPDATE/INSERT/DELETE時に取得し、他は読み取りも書き込みも不可。データの整合性を保ちながら並列性を確保する仕組みです。
Sponsor Link