情報処理試験を勉強していると、「トランザクションって結局何のこと?」「ACID特性ってどこまで覚えればいいの?」と混乱しがちです。
この記事では、トランザクションの定義からACID特性の中身、そして試験での出題パターンまでを一気に整理します。
対象試験と出題頻度
トランザクションは、ITパスポート・基本情報技術者・応用情報技術者のいずれでも出題されるテーマです。
DBMSが備えるべき機能の一つとして、ACID特性の各性質を問う問題が定番化しています。
詳細をクリックして確認
ITパスポート
基本情報技術者
応用情報技術者
★★★★★
ランクS(超重要)絶対に覚える必要あり
用語の定義
トランザクション(Transaction)とは、一言で言うと
「データベースに対する一連の処理を、分割できないひとかたまりとして管理する単位」
のことです。
イメージとしては、「銀行の振込処理」です。
AさんからBさんに1万円を振り込む場合、「Aの口座から1万円を引く」と「Bの口座に1万円を足す」は必ずセットで完了しなければなりません。
片方だけ実行されると、お金が消えたり増えたりしてしまいます。この「セットで成功するか、セットで取り消すか」を保証する仕組みがトランザクションです。
📊 トランザクションの基本情報
| 項目 | 内容 |
|---|---|
| 英語名 | Transaction |
| 分類 | データベース > トランザクション管理 |
| 必須の性質 | ACID特性(原子性・一貫性・独立性・永続性) |
| 終了方法 | コミット(確定)またはロールバック(取消) |
| 管理主体 | DBMS(データベース管理システム) |
解説
データベースは多数の利用者やアプリケーションから同時にアクセスされます。処理の途中でエラーが起きたり、別の処理と競合したりすると、データに矛盾が生じる危険があります。
この問題に対処するために、DBMSは「処理のひとかたまり」を単位として管理する仕組みを備えています。
コミットとロールバック
トランザクションは、必ず次のどちらかで終了します。
コミット(COMMIT)は、一連の処理をすべて確定する操作です。コミットが完了した時点で、変更内容がデータベースに恒久的に反映されます。
ロールバック(ROLLBACK)は、処理の途中で障害やエラーが発生した場合に、開始前の状態まで巻き戻す操作です。「なかったことにする」と考えるとわかりやすいです。
振込処理におけるコミットとロールバック
| 順序 | 操作内容 | Aの残高 | Bの残高 |
|---|---|---|---|
| 開始前 | ー | 50,000円 | 20,000円 |
| 処理① | Aの口座から1万円を引く | 40,000円 | 20,000円 |
| 処理② | Bの口座に1万円を足す | 40,000円 | 30,000円 |
▲ この2つの処理が1つのトランザクション
どちらの結果でも合計金額が変わらない=データの整合性が保たれている
ACID特性の4つの性質
トランザクションが正しく機能するために備えるべき4つの性質をACID特性と呼びます。
それぞれの頭文字を取ってACIDです。ここだけは確実に押さえてください。
| 頭文字 | 性質 | 意味 | 実現手段 |
|---|---|---|---|
| A | 原子性(Atomicity) | 処理がすべて実行されるか、まったく実行されないかのどちらかで終了する | コミット/ロールバック |
| C | 一貫性(Consistency) | 実行前後でデータベースの整合性が保たれる | 制約・データ型チェック |
| I | 独立性(Isolation) | 複数の処理を同時実行しても、順番に実行した場合と結果が一致する | 排他制御(ロック) |
| D | 永続性(Durability) | 正常終了した結果は、その後に障害が起きても失われない | ログファイル(ジャーナル) |
ACID特性をもう少し詳しく知りたい方はこちら
原子性(Atomicity)は「原子=これ以上分割できない」という意味に由来します。振込であれば「出金」と「入金」のどちらか片方だけが反映される状態は許されません。DBMSはコミットで全処理を確定し、途中障害時はロールバックで開始前まで巻き戻すことでこの性質を保証します。
一貫性(Consistency)は、処理の前後でデータベースの整合性制約(主キーの一意性、外部キー制約、NOT NULL制約など)がすべて満たされていることを指します。制約に違反する操作はDBMSが拒否します。
独立性(Isolation)は、隔離性とも呼ばれます。複数の処理が同時に走っても、互いの中間状態が見えないようにロックやスケジューリングで制御します。これが不十分だと「ダーティリード(未確定データの読み取り)」などの問題が起きます。
永続性(Durability)は、耐久性とも呼ばれます。コミット済みの結果はログファイル(ジャーナルファイル)に記録されており、ハードウェア障害が発生してもロールフォワード(前進復帰)で復旧できます。
図解:トランザクションの障害回復
障害が発生した場合、DBMSはログファイルを用いて2種類の回復処理を行います。
障害回復の2つの手法
ロールバック(後退復帰)
対象:未コミットのトランザクション
使用:更新前ログ
動作:開始前の状態に巻き戻す
ロールフォワード(前進復帰)
対象:コミット済みのトランザクション
使用:更新後ログ
動作:障害直前の状態まで再適用する
チェックポイントと障害回復のタイムライン
▲ チェックポイント以前にCOMMIT済のT1は回復不要。T2はロールフォワード、T3はロールバック対象
では、これらの知識が試験でどのように問われるか見ていきましょう。
💡 トランザクションの核心を3行で
・データベースへの一連の処理を「全部やるか・全部やめるか」で管理する単位
・ACID特性は原子性(A)・一貫性(C)・独立性(I)・永続性(D)の4つ
・コミットで確定、ロールバックで取消。障害回復にはロールフォワードも使う
試験ではこう出る!
トランザクション関連の問題は、IP・FE・APいずれでもACID特性の各性質を正しく選ばせる形式が繰り返し出題されています。出題パターンは大きく2つです。
📊 過去問での出題実績
| 試験回 | 出題内容 | 問われたポイント |
|---|---|---|
| IP R4 問77 |
ACID特性に関する記述として適切なものを選ぶ問題。 | ・「原子性」の説明が正解 ・インデックス、レプリケーション、正規化の説明がひっかけ |
| FE R3免除 問28 |
原子性(atomicity)の説明として適切なものを選ぶ問題。 | ・「全て実行か全て取消」が正解 ・永続性・独立性の説明と、べき等性の記述がひっかけ |
| FE H26春 問29 |
更新処理を完全に行うか全く処理しないかを保証する特性を選ぶ問題。 | ・4つのACID特性名から「原子性」を選ばせる形式 ・FE H28春問28、FE R5問7でも同趣旨が再出題 |
| AP R2秋 午前 問30 |
ACID特性のうち耐久性(durability)の記述を選ぶ問題。 | ・「障害後もデータが消失しない」が正解 ・原子性・一貫性・独立性の説明がひっかけ |
| AP H31春 午前 問30 |
ACID特性のうち一貫性(consistency)の記述を選ぶ問題。 | ・「整合性が保たれる」が正解 ・H24春問30、H26春問30でも同形式で再出題 |
| FE R3免除 問27 |
トランザクションに関する記述として適切なものを選ぶ問題。 | ・デッドロック発生時のロールバックが正解 ・ロックの解放やロールフォワードの誤用がひっかけ |
📝 IPA試験での出題パターン
パターン1:「ACID特性の○○を説明せよ」
4つの性質の説明文が並び、指定された性質に該当するものを選ぶ形式。原子性は「全部やるか全部やめるか」、一貫性は「整合性が保たれる」、独立性は「同時実行=順次実行」、永続性は「障害後もデータが消えない」がキーフレーズ。4つの性質の説明を入れ替えただけの問題が非常に多い。
パターン2:「トランザクションの操作として正しいものはどれか」
コミット、ロールバック、ロールフォワード、ロックといった操作の意味を正しく区別できるかを問う形式。「障害時にロールフォワードする」(×ロールバックが正解)のように操作名をすり替えるひっかけが定番。
試験ではACID特性の4つの名称と意味を正確に対応させられればOKです。各性質の実現手段(ロック、ログなど)まで深追いする必要はありません。
【確認テスト】理解度チェック
ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。
Q. データベースのトランザクション処理におけるACID特性のうち、「原子性(Atomicity)」の説明として最も適切なものはどれでしょうか?
- A. 複数のトランザクションを同時に実行しても、順番に実行した場合と同じ結果になることを保証する性質である。
- B. 正常終了したトランザクションの結果は、その後に障害が発生しても失われないことを保証する性質である。
- C. トランザクション内の処理がすべて実行されるか、まったく実行されないかのどちらかで終了することを保証する性質である。
正解と解説を見る
正解:C
解説:
原子性(Atomicity)は、トランザクションが「これ以上分割できない単位」として扱われることを保証する性質です。コミットで全処理を確定するか、ロールバックで全処理を取り消すかの二択で終了します。
選択肢Aは独立性(Isolation)の説明です。独立性は同時実行制御に関する性質であり、処理の完了・取消に関する原子性とは役割が異なります。選択肢Bは永続性(Durability)の説明です。永続性は障害発生後のデータ保全に関する性質であり、ログファイルを用いたロールフォワードによって実現されます。
よくある質問(FAQ)
Q. トランザクションとバッチ処理はどう違いますか?
トランザクションは「データの整合性を保つための論理的な処理単位」であり、オンライン処理でもバッチ処理でも使われます。一方、バッチ処理は「大量のデータをまとめて一括処理する実行方式」を指します。バッチ処理の中で複数のトランザクションが順次実行されることは普通にあるため、両者は対立する概念ではなく、レイヤーが異なります。
Q. ロールバックとロールフォワードを混同しないコツはありますか?
「バック(後ろ)=戻す、フォワード(前)=進める」と方向で覚えるのが確実です。ロールバックは未確定の処理を「開始前に戻す」操作で更新前ログを使います。ロールフォワードは確定済みの処理を「障害直前の状態まで進める」操作で更新後ログを使います。試験ではこの「使用するログの種類」を入れ替えるひっかけが頻出です。
Q. 実務のSQLでトランザクションはどう書きますか?
多くのRDBMSでは BEGIN TRANSACTION(またはSTART TRANSACTION)で開始し、COMMITで確定、ROLLBACKで取消します。MySQLの場合、デフォルトで自動コミット(autocommit)がONになっており、SQL文を1つ実行するたびに自動で確定されます。複数の操作をまとめたい場合は明示的にSTART TRANSACTIONを発行する必要があります。IPA試験ではSQL構文よりACID特性の概念理解が優先されるため、試験対策としてはSQLの記述方法まで覚える必要はありません。
Q. NoSQLデータベースにもトランザクションはありますか?
製品によります。MongoDBは4.0以降で複数ドキュメントに対するACIDトランザクションをサポートしています。一方、Apache CassandraなどはACID特性の厳密な保証よりも可用性とパーティション耐性を優先する設計(BASE特性)を採用しています。IPA試験の範囲ではリレーショナルデータベースにおけるACID特性が問われるため、NoSQLの詳細まで把握する必要はありません。