トランザクション(Transaction)とは、データベースに対する複数の処理をひとつのまとまりとして扱い、すべて成功するか、失敗した場合はまとめて取り消すための仕組みのことです。処理の途中で一部だけが反映されてしまう、中途半端な状態を防ぐために使われます。
現実世界に例えると、トランザクションは銀行振込の処理のようなものです。振込は「送る側の口座からお金を引く」処理と「受け取る側の口座にお金を足す」処理の2つで成り立っています。片方だけが成功してしまうと、お金が消えたり二重に増えたりする事態になるため、両方が必ずセットで成功する仕組みが欠かせません。
トランザクションの仕組み
トランザクションでは、複数の処理をひとつのまとまりとして開始し、すべての処理が問題なく完了した時点で内容を確定させます。途中で何らかの不具合が起きた場合は、開始前の状態まで処理をすべて巻き戻します。この「確定」と「巻き戻し」を、それぞれコミットとロールバックと呼びます。
ACIDという4つの性質
| 性質 | 内容 |
|---|---|
| 原子性 | すべて成功するか、すべて取り消されるかのどちらかになる |
| 一貫性 | 処理の前後で、データの整合性が保たれる |
| 独立性 | 複数の処理が同時に行われても、互いに干渉しない |
| 永続性 | 確定した処理結果は、障害が起きても失われない |
コミットとロールバック
「コミット」は処理内容を正式に確定させる操作で、これによりデータベースへの変更が反映されます。一方、「ロールバック」は処理を取り消し、開始前の状態に戻す操作です。エラーが発生した際に自動的にロールバックが行われるよう設計されているシステムも多くあります。
トランザクションが重要になる場面
在庫管理や予約システムのように、複数のデータを同時に整合性を保ちながら更新する必要がある場面では、トランザクションの仕組みが欠かせません。この仕組みがなければ、在庫が二重に引き当てられるといった不具合につながりかねません。
複数人が同時に操作する場合の課題
多くの利用者が同時にデータベースへアクセスするシステムでは、同じデータを複数の処理が同時に書き換えようとする場面が起こり得ます。トランザクションと合わせて「排他制御」と呼ばれる仕組みを使うことで、こうした競合が起きても矛盾のない結果を保つことができます。
あわせて知っておきたい用語
- RDB(リレーショナルDB):
トランザクションの仕組みを備えた、表形式のデータベースです。 - 【DB】コミット(Commit):
トランザクションの内容を正式にデータベースへ反映させる操作です。 - ロールバック(Rollback):
トランザクションの内容を取り消し、元の状態に戻す操作です。 - デッドロック(Deadlock):
複数の処理が互いの完了を待ち続け、動かなくなってしまう状態です。 - 排他制御:
複数の処理が同じデータを同時に更新しないよう制御する仕組みです。 - 分離レベル:
複数の処理が互いにどこまで影響し合うかを決める設定です。

コメント