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