ACID 特性
トランザクションの信頼性を支える4つの性質、原子性・一貫性・独立性・永続性をやさしく解説します。なぜ重要かを銀行振込の例で示します。
- 1.ACID はトランザクションが信頼できるための4性質:原子性(A)・一貫性(C)・独立性(I)・永続性(D)。
- 2.原子性は“全部やるか全部やめるか”、永続性は“コミットしたら障害でも消えない”を保証する。
- 3.振込のように複数の更新を1つにまとめる処理では、ACID がないとお金が消えるなどの不整合が起きうる。
ACID とは
データベースの トランザクション(ひとまとまりの処理)が「信頼できる」ために満たすべき4つの性質の頭文字が ACID です。
- 原子性 (Atomicity): 全部やるか、全部やらないか。中途半端な状態を残さない。
- 一貫性 (Consistency): ルール(制約)を破った状態にはしない。
- 独立性 (Isolation): 並行する他の処理から、途中経過が見えない。
- 永続性 (Durability): コミットした結果は、障害が起きても消えない。
この4つがそろって初めて「お金や在庫を扱っても安心なデータベース」と言えます。
なぜ重要か――銀行振込の例
「A の口座から B の口座へ 1,000 円送る」という処理は、実は2つの更新に分かれます。
UPDATE accounts SET balance = balance - 1000 WHERE id = 'A';
UPDATE accounts SET balance = balance + 1000 WHERE id = 'B';
1行目の直後にサーバが落ちたらどうなるでしょうか。A から引かれたのに、B には入っていない――つまりお金が世界から消えます。これは絶対に許されません。
そこで2つの更新を1つのトランザクションで囲み、両方成功したときだけ確定(コミット)します。
BEGIN;
UPDATE accounts SET balance = balance - 1000 WHERE id = 'A';
UPDATE accounts SET balance = balance + 1000 WHERE id = 'B';
COMMIT; -- ここで初めて確定。途中で問題があれば ROLLBACK で全部取消
これが 原子性 です。両方反映されるか、両方なかったことになるかの二択になり、「片側だけ実行」は起こりません。
4性質を振込で読み解く
| 性質 | 意味 | 振込での具体例 |
|---|---|---|
| 原子性 (Atomicity) | 全部やるか全部やめるか | 2つの UPDATE は両方反映 or 両方取消 |
| 一貫性 (Consistency) | 制約を破らない | 「残高はマイナス禁止」などのルールが常に保たれる |
| 独立性 (Isolation) | 途中経過が他から見えない | 送金中の半端な残高を別ユーザーは見ない |
| 永続性 (Durability) | コミット後は消えない | COMMIT 後はサーバ再起動でも結果が残る |
一貫性(C)は、原子性・独立性・永続性と、アプリ側が定義した制約(NOT NULL、外部キー、CHECK など)の合わせ技で守られます。「残高は0以上」というルールをどこにも書かなければ、DB はマイナス残高を一貫性違反とは見なしません。ルールを宣言して初めて守られる点に注意しましょう。
どんな時に意識する?
- 在庫引き当てと注文確定、ポイント減算と特典付与など、複数テーブル・複数行をまとめて矛盾なく更新したいとき。
- 障害や同時アクセスがあってもデータが壊れてはいけないお金・在庫まわりの処理。
多くのDBクライアントは既定で1文ごとに自動コミットします。複数の更新を一塊にしたいのに BEGIN / COMMIT で囲み忘れると、原子性は効かず「1行目だけ確定」が普通に起こります。まとめて扱いたい処理は、明示的にトランザクションで囲っているか確認してください。
ACID は「正しさ」を守るための土台です。とくに独立性をどこまで厳密にするかは分離レベルで段階的に選べ、緩めるほど速くなる代わりに異常が起きやすくなります。性能との兼ね合いは別途学ぶ価値があります。
データベース Article
ACID 特性を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
ACID
比較で見る軸
難易度: basic / カテゴリ: データベース / タグ数: 3
導入後に効く点
原子性は“全部やるか全部やめるか”、永続性は“コミットしたら障害でも消えない”を保証する。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- basic
- カテゴリ
- データベース
- タグ数
- 3
判断チェックリスト
- 自社の用途が「ACID / トランザクション」に近いか確認する。
- 強みである「ACID はトランザクションが信頼できるための4性質:原子性(A)・一貫性(C)・独立性(I)・永続性(D)。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。