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)両方やるか、どちらもやらないか一貫性(Consistency)前後で決まりが破られない独立性(Isolation)同時でも順番どおりと同じ結果耐久性(Durability)確定したものは消えない
銀行の振込を1つの例にすると、4つとも説明できます。頭文字の列を縦に読んでみてください。

原子性(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つを丸暗記しようとすると混ざります。 頭文字の英単語の意味から戻せるようにしておくのが近道です。

頭文字英語意味日本語
AAtomicityこれ以上分けられない原子性
CConsistency筋が通っている一貫性
IIsolation切り離されている独立性
DDurability長もちする耐久性

→ ACIDの正式名称と単語の意味

関連する用語

トランザクション
これ以上分けられない処理のまとまり。ACIDはこのまとまりが守る約束
2相コミット
複数のデータベースにまたがる処理を、全部やるか全部やめるかに揃える手順
排他制御
同時に触られると困るデータに鍵をかける仕組み。独立性はこれで実現する
デッドロック
鍵を取り合った結果、互いに待ち合って動けなくなる状態

ミニクイズ

トランザクションのACID特性のうち、「複数のトランザクションを同時に実行しても、1つずつ順番に実行した場合と同じ結果になる」ことを指すものはどれか。

正解は 1番:独立性(Isolation)

同時に走らせても互いの途中経過が見えず、1つずつ順に実行したのと同じ結果になる、という性質です。原子性は「すべて実行されるか、まったく実行されないかのどちらか」、一貫性は「処理の前後でデータの整合性ルールが保たれる」、耐久性は「確定した結果は障害が起きても失われない」です。4つとも混同されやすいので、英単語の意味から戻すのが確実です。

間違えた用語の復習リストを見る →

この分野をまとめて解く → データベースのミニテスト(全35問)

最終更新:2026-09-14