トランザクションとは
トランザクションとは、データベースにおいて、関連し合う複数の処理(追加、更新、削除など)を1つのまとまった『不可分の処理単位』として扱う仕組みです。「すべてが完全に成功する(コミット)」か、「途中で1つでも失敗したらすべてを実行前の状態に戻す(ロールバック)」という「All or Nothing(全か無か)」の考え方に基づいています。これにより、システムの処理中にエラーが発生しても、データベース内に矛盾した不完全なデータが残るのを防ぎ、安全性を保ちます。
具体例
銀行振込を考えてみましょう。振込処理は『Aさんの口座から1万円を引く』と『Bさんの口座に1万円を足す』という2つのステップからなります。この2つを1つのトランザクションとします。もし『Aさんの口座から1万円を引いた』直後に停電などでシステムが止まった場合、トランザクションの仕組みにより処理は自動的にキャンセル(ロールバック)され、Aさんの口座は元通りになり、『お金が消えてしまう』という重大なトラブルを防ぎます。
もう少し詳しく
トランザクション(Transaction)は、データベースの整合性と信頼性をシステム的に保証するための最重要の枠組みです。もしトランザクションという仕組みがなければ、複数ユーザーによる同時アクセスや、ハードウェアの突然の故障に対して、データベースは一瞬で矛盾だらけになってしまいます。
トランザクションは、開始命令(BEGIN TRANSACTIONなど)によってスタートし、以下のいずれかの結末で終了します。
1. コミット(COMMIT):すべての処理がエラーなく完了したため、その一連の変更データをデータベースに「最終確定(永続化)」させます。コミットした変更は、もう元に戻す(キャンセルする)ことはできません。
2. ロールバック(ROLLBACK):処理の途中でエラー(プログラムのバグ、通信エラー、ハードディスクの故障など)が発生した場合に、それまでに行ったデータ操作をすべてキャンセルし、トランザクションを「開始する直前の状態にまで巻き戻し」ます。これにより、中途半端なデータ(例えば、お金を引いたが相手に届いていない状態)がテーブルに残ることを防ぎます。
トランザクションがこれらの状態を管理するために、DBMSは「ジャーナル(ログ)ファイル」を活用しています。処理中の変更履歴をディスク上に即座に書き出しておくことで、急な停電でメモリが消去された場合でも、再起動時にログを解析し、中途半端な処理を自動的にロールバック(またはロールフォワード)して、データを一貫した安全な状態へと復旧させることができます。
試験でのポイント
IT試験においては、トランザクションの基本的な目的や、コミットとロールバックの動作、およびトランザクション処理が保証すべき4つの特性である「ACID特性」との関係性が頻出します。
試験対策としての重要ポイントは以下の通りです。
・不可分の処理単位:「これ以上分解できない一連の処理のまとまり」というキーワードが出たらトランザクションを指します。
・ロールバックとコミットの挙動:「エラー発生時はロールバック(巻き戻し)」し、「正常終了時はコミット(確定)」するというペアの動きを確実に理解しておきましょう。
・ACID特性の「原子性」との結びつき:トランザクションが「All or Nothing(すべて実行されるか、全く実行されないか)」の性質を持つことは、ACID特性における「原子性(Atomicity)」に該当します。この紐付けは非常に多く出題されます。
銀行振込や、チケットの予約、在庫の引き当てなど、実生活の業務システムにおける具体的なシナリオを提示し、「このような不都合を防ぐためにデータベースで用いられる処理単位を何と呼ぶか」という問題に対して「トランザクション」を選択できるようにしておきましょう。
関連する用語
トランザクションを最終確定する「コミット」や、処理を取り消して巻き戻す「ロールバック」、トランザクションが満たすべき4つの信頼性の指標である「ACID特性」が最重要の関連用語です。また、これを処理するシステムである「DBMS(データベース管理システム)」や、複数トランザクションの競合を防ぐための「排他制御(ロック)」も密接に関連しています。