データベースのトランザクション処理とは:不可分なひとつながりの処理|データ分析用語を解説

AUTHOR :   ギックス

本記事は、株式会社ギックスの運営していた分析情報サイト graffe/グラーフ より移設されました(2019/7/1)

データベースのトランザクション処理で整合性のとれた情報を保つ

データベースで追加、更新、削除などの処理を行う場合、トランザクション処理の「コミット」という命令を実行して処理を確定しますが、トランザクション処理でデータベース内のデータの状態まで意識している人は、データベースに携わる全員とは言い切れません。

データベースのトランザクション処理とは

トランザクション処理について、若干長文ですが、非常に分かりやすい内容でしたので、Wikipediaの内容を転記します。

トランザクション処理では、データベースの個々の操作が自動的に1つに連結され、不可分のトランザクションとされることがある。トランザクション処理システムは、1つのトランザクション内の全操作がエラー無しに成功するか、全操作が実行されないことを保証する。一部の操作が成功し、他の操作でエラーが発生した場合、トランザクション処理システムはそのトランザクションの「全」操作を「ロールバック; roll back」し、そのトランザクションによる痕跡を消去してデータベースを一貫した状態(そのトランザクションを開始する前の状態)にリストアする。あるトランザクションの全操作が完了した場合、そのトランザクションはシステムによって「コミット; commit」され、データベースに加えられた更新内容が恒久的なものとなる。コミットされたトランザクションがロールバックされることはない。
出所:Wikipedia

データベースのトランザクション処理を図示した場合

実際のデータベースの処理と若干異なりますが、トランザクション処理中は、下記のような状態になっています。db_transaction
上記の図は、担当者Aが、データ整合性を保つ必要がある売上情報テーブルと顧客情報テーブルの更新を行おうとした場合のトランザクション処理の考え方を示しています。実際のデータベースでは、「トランザクション領域」といった明確な領域はありませんが、説明を行う上で、仮想的なイメージとして記載しています。

売上情報テーブルの更新

担当者Aが、トランザクション処理にて、売上情報テーブルを更新しようとした場合、売上情報テーブルから、自分のトランザクション領域にデータをコピーし、更新します。このトランザクション領域とは、担当者Aしかアクセスできない作業領域と思ってください。

顧客情報テーブルの更新

トランザクション処理の次の更新として、顧客情報テーブルを自分のトランザクション領域にデータをコピーし、更新します。顧客情報テーブルからデータをコピーする時、コピーするデータは、トランザクション処理の開始時点(売上情報テーブルの更新時点)の断面のデータになります。このようにテーブルの時間断面のデータに対して更新することで、更新する対象のテーブルの整合性が保たれます。

売上情報テーブルと顧客情報テーブルのデータベースへの反映

トランザクション処理の最後に更新したデータを確定(コミット)します。トランザクション領域からデータベースの実テーブルに反映する時、トランザクション処理中の他のトランザクションによる更新処理と整合性を合わせます。コミットが完了するとトランザクション領域はなくなります。

トランザクション中のテーブル参照

担当者Aが、トランザクション処理中の間、他の担当者は、更新対象のテーブルを参照できます。この時、担当者Aの更新途中のデータは取得しないため、データ整合性が保てます。
また、トランザクション処理中も、別の担当者からの追加、更新、削除命令は実行可能です。その際、トランザクションの完了まで処理を待つか、並行処理を行うかは、命令の種類、データベースの種類によって異なります。

トランザクション処理中に更新結果を確認する

トランザクション処理中は、コミット命令を実行するまでテーブルの更新結果は確定しません。つまり、テーブルで更新処理を実行後、更新結果を取得し、自分の意図した更新が行われているか確認してから確定(コミット)を行うことができます。もし、自分の意図しない更新結果の場合、更新処理の取消(ロールバック)を行えば更新ミスが減らせます。
データ分析用語:索引
 

SERVICE