今回のテーマは、「データベースのトランザクション管理」についてです。
トランザクション管理?
基本情報技術者試験や応用情報技術者試験で出題されるデータベースのトランザクション管理についての問題、システム開発の現場では、当たり前のように使われている言葉ですが、「トランザクション」の意味がわからず、インターネットで調べたことがある人も多いと思います。
本記事では、データベースのトランザクション管理について解説しています。
スポンサーリンク
目次
データベースのトランザクション管理
トランザクションとは
トランザクション(英:transaction)とは、一連の処理をひとまとめにしたものです。
例えば、商品を購入するシステムで、次のような流れがあったとします。
- 商品購入開始(トランザクション開始)
- 在庫テーブルで管理している在庫数を減らす
- 注文テーブルに購入者情報を登録する
- 商品購入終了(トランザクション終了)
このように商品購入開始(トランザクション開始)~商品購入終了(トランザクション終了)までの一連の処理のことをトランザクションといいます。
トランザクションは、一連の処理をひとまとめにしたものです。そのため、トランザクション単位で処理を管理します。
トランザクションを終了するときは、一連の処理を「確定(コミット)」もしくは「破棄(ロールバック)」します。
命令 | 説明 |
COMMIT(コミット) | トランザクションで実行したSQLをすべて確定させる |
ROLLBACK(ロールバック) | トランザクションで実行したSQLをすべて破棄する |
トランザクション単位で処理を管理し、すべて成功したらコミット、一部でも失敗したらロールバックします。
トランザクション管理の必要性
トランザクションは、一連の処理をひとまとめにしたものであり、処理がすべて成功したらコミット(確定)、一部でも失敗したらロールバック(破棄)します。
では、なぜトランザクション管理が必要なのでしょうか。
例えば、商品を購入するシステムがトランザクション管理していないとします。
- 商品購入開始
- 在庫テーブルで管理している在庫数を減らす
- 注文テーブルに購入者情報を登録する処理でエラーが発生
トランザクション管理している場合は、トランザクション終了時に一連の処理を「確定(コミット)」もしくは「破棄(ロールバック)」します。
しかし、トランザクション管理していない場合は、SQLを実行した時点で確定します。
その結果、「在庫テーブル」への更新処理は成功、「注文テーブル」への登録処理は失敗となり、「在庫テーブル」の在庫が減っているにもかかわらず、「注文テーブル」に購入者情報がない、という一貫性のないデータになってしまいます。
このようなデータを作らないためにも、トランザクション管理は重要です。
トランザクションのACID特性
トランザクションのACID特性とは、トランザクション処理において必要とされる4つの要素、Atomicity(原子性)、Consistency(一貫性)、Isolation(独立性)、Durability(永続性)を頭字語で表したものです。
特性 | 説明 |
Atomicity(原子性) | トランザクションは「すべて実行する(コミット)」か「すべて破棄する(ロールバック)」のいずれかで終了すること。中途半端に一部だけ実行することは許容しない。 |
Consistency(一貫性) | トランザクションの終了状態に関わらず、データベースの整合性が保たれていること。データベースのデータに矛盾を生じさせるようなことになってはいけない。 |
Isolation(独立性) | トランザクションを複数同時に実行しても、単独実行の場合と同じ処理結果にならなければいけない。他のトランザクションの影響を受けないこと。 |
Durability(永続性/耐久性) | トランザクションの更新結果は、障害が発生してもデータベースから失われてはいけない。トランザクション完了後、ハードウェア障害があっても更新内容は保証される。 |
ACID特性は基本情報技術者試験でよく出題されます。覚えておきましょう。
スポンサーリンク
基本情報技術者試験 過去問の解説
基本情報技術者令和5年 [科目A]問7
トランザクションのACID特性は以下です。
- Atomicity(原子性):トランザクションは「すべて実行する(コミット)」か「すべて破棄する(ロールバック)」のいずれかで終了すること。中途半端に一部だけ実行することは許容しない。
- Consistency(一貫性):トランザクションの終了状態に関わらず、データベースの整合性が保たれていること。データベースのデータに矛盾を生じさせるようなことになってはいけない。
- Isolation(独立性):トランザクションを複数同時に実行しても、単独実行の場合と同じ処理結果にならなければいけない。他のトランザクションの影響を受けないこと。
- Durability(永続性/耐久性):トランザクションの更新結果は、障害が発生してもデータベースから失われてはいけない。トランザクション完了後、ハードウェア障害があっても更新内容は保証される。
設問の「トランザクションが,データベースに対する更新処理を完全に行うか,全く処理しなかったかのように取り消すか,のどちらかの結果になることを保証する特性はどれか。」と内容が一致するのは、Atomicity(原子性)です。
「イ」の原子性(atomicity)が正解です。
基本情報技術者令和3年免除 問28
DBMSに実装すべき原子性(atomicity)を説明したものはどれか、ア~エを順番に確認していきます。
ア:同一データベースに対する同一処理は,何度実行しても結果は同じである。
不正解:Consistency(一貫性)の説明です。
イ:トランザクション完了後にハードウェア障害が発生しても,更新されたデータベースの内容は保証される。
不正解:Durability(永続性/耐久性)の説明です。
ウ:トランザクション内の処理は,全てが実行されるか,全てが取り消されるかのいずれかである。
正解:Atomicity(原子性)の説明です。
エ:一つのトランザクションの処理結果は,他のトランザクション処理の影響を受けない。
不正解:Isolation(独立性)の説明です。
「ウ」が正解です。