トランザクションACIDとは(全体像)
トランザクションは「ひとまとまりの処理」だけど、それが信頼できるためには守ってほしい性質がある。それをまとめたのがACID(4つの約束の頭文字)だよー。
身近にたとえると、銀行振込。「引き落とし」と「入金」をちゃんと両方そろえる、ルールを破らない、ほかの人の振込とぶつからない、終わったら記録が消えない——こうした安心を支える約束なのー。
押さえるのは、A・C・I・Dがそれぞれ何を表すか。とくにA(原子性)=全部やるか全部やめるかがいちばん問われるよー。
詳しく:4つの約束と「常に完全とは限らない」だけ覚えれば戦える
ここが記事の心臓部。まず4つの約束を見ていこーね。
ACIDの4つの約束
| 文字 | 名前 | 意味 |
|---|---|---|
| A | 原子性(Atomicity) | 全部やるか、全部やめるか(中途半端を残さない) |
| C | 一貫性(Consistency) | 決めたルール(整合性)を保つ |
| I | 独立性(Isolation) | 同時に動いても互いに邪魔しない |
| D | 永続性(Durability) | 確定したら、その後も消えない |
とくによく出るのがA=原子性。「全部成功」か「全部なかったこと」のどちらかにして、中途半端を残さないという約束だよー。銀行振込で「引き落としだけ成功」が起きないのは、この原子性のおかげなのー。
ここで一番のひっかけが「ACIDはどんなデータベースでも常に完全に守られる」という思い込み。たくさんのコンピュータに分けた分散データベースでは、ACIDをきっちり守るのが難しく、わざとゆるめることもある。同じだと決めつけないのが大事だよー。
もう1つのひっかけが「NoSQLにはACIDが無い」という古い思い込み。最近はNoSQLでもACIDに対応したものがあるので、「NoSQL=ACIDなし」と決めつけないでねー。
わかりやすく言い換えると
要するに、銀行振込でイメージするとラクだよー。
①原子性(A) … 引き落としと入金は、両方やるか・両方やめるか(片方だけはダメ)
②一貫性(C) … 残高がマイナスにならない、といった決めたルールを保つ
③独立性(I) … 自分の振込が、他の人の振込に邪魔されない
つまり、「ACIDは信頼の4つの約束(A=全部か無か)」「分散だと完全とは限らない」、この2点が試験の急所なのー。
試験のツボ
🔴 一番出る:ACIDの4文字の意味
①A=原子性(全部やるか全部やめるか)、C=一貫性(ルールを保つ)
②I=独立性(同時でも邪魔しない)、D=永続性(確定後は消えない)
🔴 次に出る:原子性(A)
①全部成功か全部なかったことにして、中途半端を残さない
②COMMITで確定・ROLLBACKで取り消しによって実現する
🟡 押さえると安定:常に完全とは限らない
①分散データベースではACIDをきっちり守るのが難しくゆるめることもある
②NoSQLでもACIDに対応したものがある(NoSQL=ACIDなしではない)
よくある間違い
①「ACIDはどんなデータベースでも常に完全に守られる」→ ✗ 分散データベースではきっちり守るのが難しく、わざとゆるめることもある。
②「NoSQLにはACIDがいっさい無い」→ ✗ 最近はNoSQLでもACIDに対応したものがある。古い思い込み。
③「原子性は処理の一部だけ成功させることである」→ ✗ 原子性は全部やるか全部やめるか。一部だけ成功は残さない。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(ACIDの4文字)
ACIDに関する次の記述のうち、正しいものはどれか。
- ACIDは画面の明るさを4段階で細かく調整するための機能のことだとされているものである
- ACIDはデータを必ず4つに分割してから保存する決まりのことだとされているものである
- ACIDはプログラムの実行をいつも必ず4倍速くする設定のことだとされているものである
- ACIDは原子性・一貫性・独立性・永続性という、トランザクションの信頼を支える約束だ
解答は 4 だよー。
ACIDは、原子性・一貫性・独立性・永続性という、トランザクションを信頼できるものにする4つの約束の頭文字なのー。銀行振込の安心を支えるしくみだよー。
選択肢1の「明るさ調整」、選択肢2の「4つに分割」、選択肢3の「4倍速くする」はどれも誤りなのー。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 明るさ調整ではない |
| 2 | ✗ | 4分割の決まりではない |
| 3 | ✗ | 速くする設定ではない |
| 4 | ✓ | 信頼を支える4つの約束 |
オリジナル問題2(原子性)
ACIDの原子性に関する次の記述のうち、正しいものはどれか。
- 原子性は処理を全部やるか全部やめるかにして、中途半端な状態を残さない約束である
- 原子性は処理の一部だけを必ず成功させて残すことを指すものだとされているものである
- 原子性はデータを原子の大きさまで小さくする操作のことだとされているものである
- 原子性は画面に原子の絵を表示するための機能のことだとされているものである
解答は 1 だよー。
原子性は、処理を全部やるか全部やめるかにして、中途半端な状態を残さない約束なのー。銀行振込で「引き落としだけ成功」が起きないのは、これのおかげだよー。
選択肢2の「一部だけ成功」、選択肢3の「原子の大きさまで小さく」、選択肢4の「原子の絵を表示」はどれも誤りなのー。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✓ | 全部か無か・中途半端を残さない |
| 2 | ✗ | 一部だけ成功は残さない |
| 3 | ✗ | データを小さくする操作ではない |
| 4 | ✗ | 絵を表示する機能ではない |
オリジナル問題3(常に完全とは限らない)
ACIDの実現に関する次の記述のうち、正しいものはどれか。
- ACIDはどんなデータベースでも常に完全に守られ、ゆるめることはないものだとされている
- NoSQLにはACIDがいっさい無く、今後も対応することはないものだとされているものである
- 分散データベースではACIDをきっちり守るのが難しく、わざとゆるめることもあるのだ
- ACIDはデータベースとは無関係の、画面の設定項目のことだとされているものである
解答は 3 だよー。
たくさんのコンピュータに分けた分散データベースでは、ACIDをきっちり守るのが難しく、わざとゆるめることもあるのー。常に完全とは限らないんだよー。
選択肢1の「常に完全」、選択肢2の「NoSQLは一切なし」、選択肢4の「画面の設定」はどれも誤りなのー。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 分散ではゆるめることもある |
| 2 | ✗ | NoSQLでもACID対応がある |
| 3 | ✓ | 分散では守るのが難しくゆるめることも |
| 4 | ✗ | 画面の設定ではない |
まとめ
押さえどころ
- 🔴 ACIDの4文字 = 原子性・一貫性・独立性・永続性。トランザクションの信頼を支える約束。
- 🔴 原子性(A) = 全部やるか全部やめるか。中途半端を残さない(COMMIT/ROLLBACKで実現)。
- 🟡 常に完全とは限らない = 分散データベースではゆるめることも。NoSQLでもACID対応がある。
次に学ぶ
- SQLトランザクション制御 ── COMMITやROLLBACKの命令。原子性(A)を実際に実現するしくみ。
- インデックス種類 ── 検索を速くする索引。トランザクションと合わせてデータベースの土台。
執筆: SikakuQuest編集部