目次
トランザクション管理
データベースのトランザクションとは
トランザクション(英:transaction)とは、一連の処理をひとまとめにしたものです。
以下はトランザクションのイメージ図です。
上記図の例は、次のような流れです。
- トランザクション開始
- 「在庫テーブル」で保持している商品の在庫を減らす
- 「注文テーブル」に購入者情報を登録
- トランザクション終了
このようにトランザクション開始~終了までの一連の処理のことをトランザクションといいます。
そしてトランザクションを終了するときは、一連の処理を「確定させるのか(コミット)」「破棄するのか(ロールバック)」の命令を実行しトランザクションを終了します。
命令 | 説明 |
COMMIT(コミット) | トランザクションで実行したSQLをすべて確定させる |
ROLLBACK(ロールバック) | トランザクションで実行したSQLをすべて破棄する |
なぜトランザクション管理が必要なのか?
トランザクションとは、一連の処理をまとめたものであり、一連の処理単位でコミット(確定)もしくはロールバック(破棄)します。
スポンサーリンク
では、なぜトランザクション管理が必要なのでしょうか。
例えば、次の図のようにトランザクション管理なしで商品を購入したとします。
上記図の例は、次のような流れです。
- 処理開始
- 「在庫テーブル」で保持している商品の在庫を減らす
- 「注文テーブル」に購入者情報を登録するもエラーが発生
- 処理終了
トランザクション管理していないので、実行したSQLは登録または更新した時点で確定します。
そのため上記図のように、「在庫テーブル」への更新は成功したが、「注文テーブル」への登録に失敗した場合、「注文テーブル」に購入者情報が登録されていないにもかかわらず「在庫テーブル」の在庫が減っているという一貫性のないデータになってしまいます。
トランザクション管理することで、このような問題を解決できます。
トランザクションのACID特性
ACID特性とは、トランザクション処理において必要とされる4つの要素、Atomicity(原子性)、Consistency(一貫性)、Isolation(独立性)、Durability(永続性)を頭字語で表したものです。
Atomicity(原子性)
トランザクションは「すべて実行する」か「まったく実行しない」のいずれかで終了すること、中途半端に一部だけ実行することは許容しない。これがAtomicity(原子性)です。
Consistency(一貫性)
トランザクションの終了状態に関わらず、データベースの整合性が保たれていること。データベースのデータに矛盾を生じさせるようなことになってはいけない。これがConsistency(一貫性)です。
Isolation(独立性)
トランザクションを複数同時に実行しても、単独実行の場合と同じ処理結果にならなければいけない。他のトランザクションの影響を受けないこと。これがIsolation(独立性)です。
Durability(永続性)
トランザクションの更新結果は、障害が発生してもデータベースから失われてはいけない。トランザクション完了後、ハードウェア障害があっても更新内容は保証される。これがDurability(永続性)です。