まず結論(超要約)
ACIDは「トランザクション=ひとかたまりの処理を安全に終えるための4つの約束」です。
- A(Atomicity/原子性):全部成功 or 全部なかったこと
- C(Consistency/一貫性):前後でルール違反のデータを作らない
- I(Isolation/分離性):同時進行の他人の処理に振り回されない見え方
- D(Durability/永続性):確定した結果は消えない
4つを生活のたとえで
🧩 A:Atomicity(原子性)=「セット販売はセットで」
お弁当の“ごはん+おかず”は片方だけ受け取り不可。
DBでも「残高−1万円」と「相手に+1万円」はどちらも成功かどちらも取り消し(途中で止めない)。
キーワード:オール or ナッシング(全部かゼロか)
✅ C:Consistency(一貫性)=「お店のルールは常に守る」
年齢確認が必要なら必ず確認、在庫はマイナスにしない。
DBでも「重複禁止」「数量は正数」「外部キーは存在する相手だけ」など、決めたルールを前後で破らない。
注意:ここでの“整合性”はDBの中のルールの話。
分散システムの“最終的整合性”とは別物。
🚦 I:Isolation(分離性)=「レジは順番に、カゴの中身は混じらない」
混んだスーパーでも自分の会計は自分だけのもの。
DBでも同時に動く処理同士が干渉しない見え方になる(未確定の他人の変更は見えにくい/待たせる)。
上級ワードの雰囲気だけ:
- Dirty Read(他人の未確定を読んじゃう)
- Non-Repeatable Read(同じ行を読み直すと変わる)
- Phantom Read(同じ検索なのに件数が増減)
※完璧に防ぐほど“待ち”が増える=速さと安全のトレードオフ。
🔒 D:Durability(永続性)=「レシートが出たら取引は残る」
会計完了(レシート発行)後、停電しても“買ったこと”は消えない。
DBでも確定(コミット)後の結果は障害でも失われない。
60秒で復習(1行ずつ覚える)
- A:途中の成功はなし。全部かゼロ。
- C:制約ルールは前後で常に正しい。
- I:同時処理に振り回されない見え方。
- D:確定したら消えない。
よくある誤解・つまずき
- 「Consistency=分散DBの整合性?」→ 違う。ここではスキーマ制約やチェックの話。
- 「Isolationは厳しいほど正義?」→ 安全↑だが待ち時間↑/失敗リトライ↑。用途に合わせて設定。
- 「ACIDがあれば過去に戻せる?」→ 別。それはバックアップ/ポイントインタイムリカバリの領域。
実務のコツ(やさしめ3点)
- トランザクションは小さく・短く
長い処理を1つに詰め込むと“待ち”や衝突が増える。 - “正しさ”はまず制約で守る
アプリでチェックする前に、DBの主キー・外部キー・UNIQUE・CHECKで土台を固める。 - 隔離レベルは“必要十分”に
まずは既定(多くは READ COMMITTED)でOK。どうしても件数のぶれを許容できない検索だけ上げる。
ミニまとめ
ACID=トランザクション安全の4約束。
A全部かゼロ、Cルール違反なし、I同時処理に振り回されない、D確定後は消えない。
ポイントは「小さくまとめて、制約で守り、必要十分な分離」。