トランザクション・ACIDとは(全体像)
トランザクションとは、データベースで、いくつかの処理を「ひとまとまり」として扱う、処理の単位のことだ。
銀行振込でたとえると分かりやすい。「Aさんの口座から1万円引く」と「Bさんの口座に1万円足す」は、セットで1つのまとまり。もし片方だけ実行されたら、お金が消えたり増えたりして大変だ。だから、ひとまとまりで扱う。
このトランザクションが守るべき4つの性質が、ACIDだ。
- A:原子性(Atomicity) … 全部実行するか、全部取り消すか(All or Nothing)
- C:一貫性(Consistency) … 処理の前後で、データの整合性が保たれる
- I:独立性(Isolation) … 複数の処理が同時でも、互いに影響しない
- D:永続性(Durability) … 完了したら、結果は確実に残る
ここで一番のポイント。ACIDは4つの性質(A・C・I・D)だ。「ACIDは3つの性質」と思い込むと誤りになる。
詳しく:原子性(All or Nothing)
ここが心臓部。4つの性質を表で押さえよう。
ACIDの4つの性質
| 性質 | やさしい意味 |
|---|---|
| A:原子性 | 全部実行するか、全部取り消すか(All or Nothing) |
| C:一貫性 | 処理の前後で、整合性が保たれる |
| I:独立性 | 同時の処理が、互いに影響しない |
| D:永続性 | 完了したら、結果は確実に残る |
とくに大事なのが、原子性(A)。これは、ひとまとまりの処理を、全部実行するか、全部取り消すか(All or Nothing)という性質だ。途中で失敗したら、それまでの処理を取り消して、なかったことにする。
振込でいえば、「出金」と「入金」のどちらか片方だけが実行される、ということが起きないようにする。だから、お金が消えたり、増えたりしない。
わかりやすく言い換えると
身近なたとえで整理しよう。
トランザクションは、「振込の出金と入金のように、セットで1つとして扱う処理のまとまり」のイメージ。
ACIDは、「トランザクションが守る4つの性質。原子性・一貫性・独立性・永続性」こと。要するに、4つそろって、安全な処理になる。
原子性は、「全部やるか、全部やめるか(All or Nothing)。途中で失敗したら、なかったことにする」こと。つまり、中途半端な状態を残さない。
試験のツボ
🔴 一番出る:ACIDの4つの性質
①A:原子性、C:一貫性、I:独立性、D:永続性
②ACIDは「4つ」の性質(3つではない)
🔴 次に出る:原子性(All or Nothing)
①全部実行するか、全部取り消すか
②途中で失敗したら、なかったことにする(振込の出金と入金)
🟡 押さえると安定:トランザクションの正体
①データベースのひとまとまりの処理の単位
②セットで1つとして扱う(片方だけ、を防ぐ)
よくある間違い
①「ACIDは、3つの性質のことだ」→ ✗ ACIDは4つの性質(原子性A・一貫性C・独立性I・永続性D)。
②「原子性は、処理を途中まで実行して、そこで止めてよい性質だ」→ ✗ 原子性は、全部実行するか、全部取り消すか(All or Nothing)。中途半端な状態を残さない。
③「トランザクションは、1つの処理だけを指し、まとまりではない」→ ✗ トランザクションは、いくつかの処理をひとまとまりとして扱う単位。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(トランザクションの正体)
トランザクションに関する次の記述のうち、最も適切なものはどれか。
- 社員の出退勤を記録して、毎月の給与を計算するためのしくみだ
- 取引先へ毎月の請求書を郵送する、決まった事務作業のことを指す
- 完成したシステムを宣伝して、より多く売るための広告活動である
- データベースで、ひとまとまりとして扱う処理の単位のことである
解答は 4 です。
トランザクションは、データベースの、ひとまとまりとして扱う処理の単位なのです。振込の出金と入金がセット、のイメージなります。
選択肢1は給与計算、選択肢2は請求書の事務、選択肢3は広告で、どれも違うのです。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 給与計算のしくみではない |
| 2 | ✗ | 請求書の事務の話 |
| 3 | ✗ | 広告活動ではない |
| 4 | ✓ | ひとまとまりとして扱う処理の単位で正しい |
オリジナル問題2(原子性)
ACIDの原子性に関する次の記述のうち、最も適切なものはどれか。
- 処理を全部実行するか、全部取り消すかのどちらかになる性質だ
- 社員の給与を計算するときだけ、関係するとされているものである
- 取引先へ請求書を郵送するときだけ、関係するとされているのである
- 処理を途中まで実行して、そこで止めてよい性質なのである
解答は 1 です。
原子性は、全部実行するか、全部取り消すか(All or Nothing)の性質なのです。途中で失敗したら、なかったことにするなります。
選択肢2の給与、選択肢3の請求書、選択肢4の「途中で止めてよい」は、いずれも違うのです。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✓ | All or Nothingの性質で正しい |
| 2 | ✗ | 給与計算で関係するのではない |
| 3 | ✗ | 請求書のときだけではない |
| 4 | ✗ | 途中で止めず、全部か全部取消 |
オリジナル問題3(ACIDの数)
ACIDに関する次の記述のうち、最も適切なものはどれか。
- 社員の給与の計算しだいで、性質が決まるとされているものである
- 取引先への請求書の枚数しだいで、性質が決まるとされているのだ
- 原子性・一貫性・独立性・永続性という、4つの性質のことである
- ACIDは、3つの性質のことだとされているものなのである
解答は 3 です。
ACIDは、原子性・一貫性・独立性・永続性という、4つの性質なのです。ACIDは4つ、と覚えるとよいなります。
選択肢1の給与、選択肢2の請求書、選択肢4の「3つの性質」は、いずれも違うのです。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 給与計算で決まるのではない |
| 2 | ✗ | 請求書の枚数で決まるのではない |
| 3 | ✓ | 4つの性質(A・C・I・D)で正しい |
| 4 | ✗ | ACIDは4つの性質 |
まとめ
押さえどころ
- 🔴 トランザクション = データベースのひとまとまりの処理の単位(振込の出金と入金など、セットで1つ)。
- 🔴 ACID = トランザクションが守る4つの性質(原子性A・一貫性C・独立性I・永続性D)。
- 🟡 原子性(All or Nothing) = 全部実行するか、全部取り消すか。途中で失敗したら、なかったことにする。
次に学ぶ
- データベース ── データを整理してためるしくみ。トランザクションで、安全にデータを更新する。
- COMMIT・ロールバック ── 処理を確定する(COMMIT)/取り消す(ロールバック)操作。原子性を支える。
執筆: SikakuQuest編集部