ACID特性(ACID properties)
トランザクションが備えるべき4つの性質。原子性・一貫性・独立性・耐久性のこと。
もう少し詳しい説明
ACID特性は、トランザクションが守るべき4つの約束をまとめたものです。頭文字を並べて ACID(アシッド)と呼びます。
まず、トランザクションとは何か
トランザクションは、まとめて1つとして扱う、一連の処理のかたまりです。
銀行の振込で考えてください。「Aさんの口座から1万円を引く」と「Bさんの口座に1万円を足す」は、2つの操作ですが、片方だけ行われては困ります。この2つをひとまとめにして「振込」という1つの処理として扱う。そのまとまりがトランザクションです。
ACIDは、このまとまりが守るべき4つの約束を並べたものです。
4つを、振込の場面で数えていく
銀行の振込を1つ例にすると、4つともそのまま出てきます。Aさんの口座から1万円を引いて、Bさんの口座に1万円を足す。この場面で「守られていないと困ること」を数えていきます。
原子性(Atomicity)— 両方やるか、どちらもやらないか
引いたところで停電したらどうなるでしょうか。Aさんのお金だけが消えて、Bさんには届いていない。片方だけ成立した状態が、この世で一番困る結果です。
そのため「この2つはひとまとまり」と決めておき、途中で失敗したら引いたぶんも無かったことにします。これ以上分けられない、という意味で原子性と呼びます。
一貫性(Consistency)— 前後で決まりが破られない
処理が終わったあと、銀行全体のお金の合計は変わっていないはずです。
主キー(表の中の行を1つに決められる列)が重複していない、外部キー(別の表を指し示すための列)の指す先が実在する、残高がマイナスにならない。
こうした守るべき決まりが、処理の前でも後でも破られていないことを指します。速さや同時実行の話ではありません。
独立性(Isolation)— 同時にやっても、順番どおりと同じ結果
残高1万円の口座から、2人が同時に1万円ずつ引き出そうとしたとします。
片方の途中経過がもう片方に見えてしまうと、どちらも「残高1万円」を読んでしまいます。両方とも「1万円あるから引き出せる」と判断し、合わせて2万円が出ていきます。1万円しかない口座から、です。
同時に走らせても、1つずつ順番にやったのと同じ結果になること。これが独立性です。隔離性とも呼びます。
(「1つずつ順番にやったのと同じ」であって、投げた順に並ぶとは限りません。どちらが先になるかは決まっていません。保証されるのは「何らかの順で1つずつやったのと同じ結果になる」ところまでです。)
実際には排他制御(同じものを2つの処理が同時に書き換えないよう、順番に1つずつ使わせること。ロックとも呼びます)で実現します。
どこまで厳密に守るかは分離レベル(どの程度まで他の処理の途中を見せないか、という設定の段階)として選べます。緩めるほど速くなりますが、他の処理の確定前の値が見えるといった問題が起こりえます。
耐久性(Durability)— 確定したものは消えない
「振込が完了しました」と表示された以上、その直後に停電しても、翌朝には振込が済んでいなければなりません。
いったん確定した結果は、障害が起きても失われないこと。
更新の内容をログ(いつ何をどう変えたかを順に書き残した記録)に残しておき、障害のあとにそのログを読み直して元に戻すことで実現します。この復旧の作業をリカバリと呼びます。
性質と、実現する手段は別
4つとも満たすべき性質であって、やり方そのものではありません。
独立性を実現するのが排他制御(順番に1つずつ使わせること)、耐久性を実現するのがログ(変更の記録)とリカバリ(記録から元に戻す作業)、という関係です。
| 性質 | それを実現する手段 |
|---|---|
| 独立性 | 排他制御(ロック) |
| 耐久性 | ログとリカバリ |
なお、独立性を厳密に守ろうとしてロックを取り合った結果、互いに待ち合って動かなくなることがあります。これがデッドロック(2つの処理が、互いに相手の持っているものを待ち続けて、どちらも進めなくなる状態)です。
試験ではこう出る
科目A(旧・午前)のデータベース分野で頻出です。
多いのは、4つの性質のうち1つの説明文を示して名前を選ばせる形、あるいは名前を示して説明を選ばせる形です。応用情報では、独立性を保つための排他制御(順番に1つずつ使わせること)や、耐久性を支えるログとリカバリの仕組みと結びつけて問われます。また、分離レベル(他の処理の途中をどこまで見せないかの設定)を緩めたときに何が起こるかまで踏み込まれることがあります。
4つを丸暗記しようとすると混ざります。 頭文字の英単語の意味から戻せるようにしておくのが近道です。
| 頭文字 | 英語 | 意味 | 日本語 |
|---|---|---|---|
| A | Atomicity | これ以上分けられない | 原子性 |
| C | Consistency | 筋が通っている | 一貫性 |
| I | Isolation | 切り離されている | 独立性 |
| D | Durability | 長もちする | 耐久性 |
関連する用語
- トランザクション
- これ以上分けられない処理のまとまり。ACIDはこのまとまりが守る約束
- 2相コミット
- 複数のデータベースにまたがる処理を、全部やるか全部やめるかに揃える手順
- 排他制御
- 同時に触られると困るデータに鍵をかける仕組み。独立性はこれで実現する
- デッドロック
- 鍵を取り合った結果、互いに待ち合って動けなくなる状態
ミニクイズ
トランザクションのACID特性のうち、「複数のトランザクションを同時に実行しても、1つずつ順番に実行した場合と同じ結果になる」ことを指すものはどれか。
正解は 1番:独立性(Isolation)
同時に走らせても互いの途中経過が見えず、1つずつ順に実行したのと同じ結果になる、という性質です。原子性は「すべて実行されるか、まったく実行されないかのどちらか」、一貫性は「処理の前後でデータの整合性ルールが保たれる」、耐久性は「確定した結果は障害が起きても失われない」です。4つとも混同されやすいので、英単語の意味から戻すのが確実です。
この分野をまとめて解く → データベースのミニテスト(全35問)
最終更新:2026-09-14