トランザクション(transaction)
- テクノロジ系
- データベース
- 基本情報
- 応用情報
- 重要度 ★★★★★
全部成功させるか、全部取り消すかのどちらかにする、分けられない処理のまとまり。
もう少し詳しい説明
トランザクションは、「ぜんぶ成功」か「ぜんぶ無かったこと」のどちらかにしたい処理のまとまりです。
銀行の振込を思い浮かべてください。Aさんの口座から1万円を引いて、Bさんの口座に1万円を足す。この2つは、両方できるか、どちらもやらないかのどちらかでなければ困ります。
引いたところで停電したらどうなるでしょうか。Aさんのお金だけが消えて、Bさんには届いていない。片方だけ成立した状態が、この世で一番困る結果です。
そこで「この2つはひとまとまりだ」と宣言しておきます。途中で失敗したら、引いた1万円も無かったことにして元に戻す。この宣言がトランザクションです。
終わり方は2つだけ
トランザクションは BEGIN で始まり、次のどちらかで終わります。
- コミット(COMMIT) — 全部うまくいったので確定する
- ロールバック(ROLLBACK) — どこかで失敗したので、開始前の状態に戻す
途中で止まったまま、という終わり方はありません。
障害から戻すときの2つの向き
処理の経過はログ(ジャーナル)に記録されていて、障害が起きたときの復旧に使われます。戻し方に2種類あり、試験ではこの2つの取り違えを必ず狙われます。
| 方法 | 何をするか | いつ使うか |
|---|---|---|
| ロールバック(後退復帰) | 開始前の状態まで戻す | コミット前に落ちた処理 |
| ロールフォワード(前進復帰) | バックアップに記録を再適用して進める | コミット済みの処理 |
判断の基準は**「コミット済みかどうか」**の一点です。確定していたのなら、その結果は残さなければいけないので進める。確定していなかったのなら、無かったことにするので戻す。そう考えれば迷いません。
満たすべき性質
トランザクションが守るべき性質を4つにまとめたものが ACID特性です。いま説明した「ぜんぶか、ぜんぶ無しか」は、そのうちの原子性にあたります。
試験ではこう出る
科目A(旧・午前)では定義問題とACID特性の組合せ問題が定番です。「障害発生時にロールバック/ロールフォワードのどちらを行うか」を問う障害回復の問題も繰り返し出ます。応用情報の科目Bではデータベース設計の中で、どこからどこまでを1つのトランザクションにするかという設計判断として問われます。 障害の種類(媒体障害・システム障害)と回復方法の対応を選ばせる形も定番です。「コミット済みかどうか」で判断すれば迷いません。
関連する用語
- コミット
- 処理を確定させる操作。ここまで来て初めて結果が残る
- ロールバック
- 確定前の処理を取り消して、始める前の状態に戻すこと
- ロールフォワード
- 確定済みの処理を、バックアップに対してもう一度適用すること。取り消しではない
- ACID特性
- 処理が守るべき4つの約束。原子性・一貫性・独立性・耐久性
- 2相コミット
- 複数のデータベースにまたがるとき、全部やるか全部やめるかに揃える手順
- 排他制御
- 同時に触られると困るデータに鍵をかける仕組み
ミニクイズ
トランザクション処理でコミットとロールバックの説明として正しいものはどれか。
正解は 3番:コミットは更新を確定させ、ロールバックは開始前の状態に戻す
トランザクション内の処理がすべて成功したときにコミットして確定し、途中で失敗したらロールバックして開始前の状態に戻します。「両方成功か、両方なかったことに」がトランザクションの本質です。
最終更新:2026-09-14