頻出高 ⏱ 7分★★★★★

ACID特性

原子性・一貫性・独立性・耐久性を具体例で完全理解

信頼性の高いトランザクション処理に必要な4 つの性質の頭文字。データベーススペシャリスト試験の最重要テーマ。

ACID 4 性質まとめ
性質英語キーワード実現技術
原子性Atomicity全か無かROLLBACK・UNDO ログ
一貫性Consistency制約を維持整合性制約・トリガー
独立性Isolation干渉しないロック・MVCC
耐久性Durabilityコミット後は永続REDO ログ・WAL
「全か無か」 — トランザクション内の操作は全て成功するか、全て取り消されるか(ROLLBACK)のどちらか。途中で止まった場合も UNDO ログで元に戻る。
銀行振込での原子性
操作原子性なし(失敗時)原子性あり(ROLLBACK)
① 口座 A から引き落とし成功(-1万円)取り消し(元の残高)
② 口座 B へ入金失敗 → 1万円消失取り消し(元の残高)
「制約を維持」 — トランザクション前後でデータベースの整合性制約(主キー・外部キー・CHECK・NOT NULL)が常に満たされた状態を保つ。
一貫性の例
制約違反例一貫性が保証する動作
残高 >= 0 の CHECK 制約残高 0 の口座から引き落としトランザクションが失敗(制約違反)
外部キー制約存在しない顧客 ID で受注を挿入INSERT が拒否される

一貫性はアプリケーション設計(正しい業務ルールの実装)も含む広い概念。

「互いに干渉しない」 — 並行して実行される複数のトランザクションは、互いの中途状態を見えないかのように動作する。独立性のレベルは分離レベルで調整する。
独立性がないと起きる問題
問題状況
ダーティリード未コミットの変更が他のトランザクションから見える
反復不可能読み取り同じ行を 2 回読むと値が変わる
ファントムリード同じ条件で 2 回 SELECT すると行数が変わる

独立性はロック制御や MVCC(多版同時実行制御)で実現される。

「コミット後は永続」 — COMMIT されたトランザクションの変更は、その後システム障害が発生しても失われない。WAL(Write Ahead Logging)や REDO ログで実現する。
耐久性の実現:WAL の流れ
① COMMIT 命令を受け取る
② REDO ログ(変更内容)をディスクに書き込み(fsync)
③ コミット成功を応答(この時点でデータは永続化)
④ 電源断が起きても REDO ログから変更を再適用できる
RDB vs NoSQL の一貫性モデル
特性ACID(RDB)BASE(NoSQL)
一貫性強一貫性(即時整合)結果整合性(Eventually Consistent)
可用性制約により低くなる場合も高可用性を優先
重視点整合性・信頼性スケーラビリティ・可用性

📝 理解度チェック

ACID の「A(原子性)」を実現する主な仕組みはどれか?
ACID の「D(耐久性)」を実現する主な仕組みはどれか?
ACID の「I(独立性)」が保たれていない場合に起きる問題はどれか?

読了ボタンを押すとトップページの進捗に反映されます