データベース

【基本情報】トランザクション処理とコミット・ロールバックについて解説

お茶ん太
お茶ん太

この記事では、トランザクション処理について、初心者にも分かりやすく図解付きで丁寧に解説しています!

トランザクション処理

  • トランザクション処理とはデータベースに対してまとめて処理する必要がある操作を一括りにした処理。
  • ACID特性はトランザクション処理が満たす必要がある4つの特性。

ACID特性

  • 原子性とは、トランザクション処理は全て完了するか全く実行しないかを満たす必要があるという性質。
  • 一貫性とは、トランザクション処理前後でデータ不整合を起こさないようにする必要があるという性質。
  • 独立性とは、それぞれのトランザクション処理は干渉せずに実行する必要があるという性質。
  • 耐久性とは、データベースに障害が発生してもデータが消えない必要があるという性質。

コミットとロールバック

  • トランザクション処理が成功したときに変更を確定する操作をコミットと呼ぶ。
  • トランザクション処理が失敗したときにトランザクション処理実行前の状態に戻す操作をロールバックと呼ぶ。
  • トランザクション処理が失敗したときに処理が強制終了することをアボートと呼ぶ。

トランザクション処理

トランザクション処理とは、データベースに対してまとめて行う必要がある操作を一括りにした処理のことです。トランザクション処理は全てを完全に行うか、全く行わないかのどちらかです。

トランザクション処理の例は銀行の振込処理です。
振込処理は以下の4つの処理から成り立ち、中断することは許されません。

  1. Aさん(送金する人)の口座残高を確認する
  2. Aさんの口座から残高を減らす
  3. Bさん(入金される人)の口座残高を確認する
  4. Bさんの口座残高から残高を増やす

トランザクション処理が途中で終了した場合を考えてみましょう。例えば、送金口座から残高を減らした後にシステム障害が起きて、入金口座の残高を増やす処理が行われなかったとします。Aさんの送金口座からお金は減ったのに、Bさんの入金口座の残高が増えないことになり、凄く困ったことになりますよね。

なので、処理を行う時は4つ全て行う必要があり、途中で失敗した時は一番最初の状態に戻す必要があります。このように、一連で行う必要がある操作の一括りをトランザクション処理と言います。

ACID特性

トランザクション処理はACID特性という4つの特徴を満たす必要があります。

原子性(Atomicity)

トランザクション処理は全て完了するか、全く実行されないかのどちらかで終了する必要があります。これを原子性と呼びます。

一貫性(Consistency)

トランザクション処理の前後でデータ不整合が生じないようにする必要があります。例えば、残高が100円しかないのに1000円の振込を実行したら、残高が-900円になり、おかしなデータが生じてしまいますよね。このような不整合を起こさないようにする性質が一貫性です。

独立性(Isolation)

複数のトランザクション処理を実行しても、他のトランザクション処理の影響を受けずに実行できるようにする必要があります。例えば、残高が1000円あるときに、100円の銀行引き落としと200円の銀行引き落としが同時に実行されたとします。

この時、1000円-100円=900円の処理と900円-200円=700円の処理がそれぞれ独立して行われる必要があります。つまり残高は700円になるということですね。

同時に行われたから、1000円-100円=900円、1000円-200円=800円で計算して残高が800円になりました。では困りますよね。

トランザクション処理は1つずつ完了させる必要があるという性質が独立性になります。

耐久性(Durability)

トランザクション処理が完了した後は、データベースに障害が発生しても結果を保存する必要があります。銀行のシステムに障害が発生してよく分からなくなったので残高を0円にします、だと困りますよね。例え、障害が発生してもデータは保存しておく必要があります。この性質を耐久性と呼びます。

コミットとロールバック

トランザクション処理が成功したときは変更を確定する処理を行い、それをコミットと呼びます。一方、トランザクション処理が失敗したときは、データベースの状態をトランザクション処理を実行する前に戻す操作を行い、それをロールバックと呼びます。また、トランザクション処理が失敗し、処理を強制終了することをアボートと呼びます。

基本情報技術者試験での出題例

令和6年度問7

基本情報技術者
科目A 令和6年度問7

DBMSに実装すべき原子性(atomicity)を説明したものはどれか。

ア 同一データベースに対する同一処理は,何度実行しても結果は同じである。

イ トランザクション完了後にハードウェア障害が発生しても,更新されたデータベースの内容は保証される。

ウ トランザクション内の処理は,全てが実行されるか,全てが取り消されるかのいずれかである。

エ 一つのトランザクションの処理結果は,他のトランザクション処理の影響を受けない。

正解と解説

正解は”ウ”

トランザクション処理は全て完了するか、全く実行されないかのどちらかで終了する必要があります。これを原子性と言います。

令和5年度問7

基本情報技術者
科目A 令和5年度問7

トランザクションが,データベースに対する更新処理を完全に行うか,全く処理しなかったのように取り消すか,のどちらかの結果になることを保証する特性はどれか。

ア 一貫性(consistency)
ウ 耐久性(durability)

イ 原子性(atomicity)
エ 独立性(isolation)

正解と解説

正解は”イ”

トランザクション処理は全て完了するか、全く実行されないかのどちらかで終了する必要があります。これを原子性と言います。

令和元年度秋期問28

基本情報技術者
午前試験 令和元年度秋期問28

一つのトランザクションはトランザクションを開始した後,五つの状態(アクティブ,アボート処理中,アボート済,コミット処理中,コミット済)を取り得るものとする。このとき,取ることのない状態遷移はどれか。

正解と解説

正解は”イ”

アボートは強制終了で、コミットはトランザクション処理が成功した時にデータを確定する操作です。

強制終了したあとに、トランザクション処理のデータを確定することは無いので、答えはイです。

平成29年度秋期問29

基本情報技術者
午前試験 平成29年度秋期問29

RDBMSの機能によって実現されるトランザクションの性質はどれか。

ア ACID特性         イ 関数従属性
ウ 候補キーの一意性     エ データ独立性

正解と解説

正解は”ア”

平成28年度春期問28

基本情報技術者
午前試験 平成28年度春期問28

トランザクションが,データベースに対する更新処理を完全に行うか,全く処理しなかったのように取り消すか,のどちらかの結果になることを保証する特性はどれか。

ア 一貫性(consistency)     イ 原子性(atomicity)
ウ 耐久性(durability)      エ 独立性(isolation)

正解と解説

正解は”イ”