トランザクションとは何なのか、それを管理するとはどういうことなのかを知っておきましょう。
- 刻々と書き換えられるデータベース -
アプリケーションを実行して業務処理を行えば、データベースは頻繁に書き換えられます。SELECT命令でデータセットを抽出するだけでは仕事になりません。新しいレコードが追加されたり、古いレコードを削除したり、あるいはデータの一部(フィールド)を書き換えたり……。場合によっては、テーブルそのものを削除したり新しく作ったりすることもあるはずです。
そうやって日々、あるいは時々刻々と内容が書き換えられていくのが、データベースのあるべき姿です。業務用のデータベースが週に一度しか書き換えられないとしたら、業務自体がほぼ停止していることになります。
- 確定するか取り消すか? -
さて、こうして次々と書き換えられていくデータベースですが、ただ闇雲に書き換えられている訳ではありません。当然のことながら、実際の業務内容を反映し、様々なテーブルの内容が互いに矛盾しないように連携しつつ書き換えられています。
しかし、時にはテーブル同士の関連に照らし合わせて、矛盾を生じるような変更が生じることもあります。また、単純な操作ミスやプログラムのミス(バグ)によって、本来の内容とは異なる内容に書き換えられることもあるでしょう。
そのような場合に備えて、データベース管理システム(DBMS)には、SQLによって変更された内容を記録しておき、後からその変更を確定するか元に戻すかを選択できる機能が備わっています。記録された処理内容をトランザクションと言い、SQLによってそれを管理できます。
- トランザクションの管理 -
データベースに対してINSERT、UPDATE、DELETEなど一連の命令を発行すると、データベース・エンジンはユーザーからは見えない様々な内部処理を行ってテーブルの内容を書き換え、最終的にその変更内容を確定します。一度確定された内容は元に戻せません※1。
トランザクション(transaction)とは、この『一連の内部的な変更処理』を言います。つまり、SQL命令を受け取ってから実際にテーブルやフィールドの内容が変更されるまでの、データベース・エンジンの一連の動作です。
最終的に何もしなければ、トランザクション──内部処理が確定してテーブルは書き換えられます。しかし、内部で行うべき処理をすぐに実行しないで一旦記録しておき、問題がなければ実際にそれを行い、もし何らかの問題が発生すれば実行せずに取り消せるようにしておけば、先述したような操作ミスやバグによる矛盾を回避できます。
このような操作を「トランザクションの管理」と言います。
※1 もちろん、さらにDELETEやUPDATEなどの命令を発行してデータベースを書き換え、形として最初の変更を行う前の状態に戻すことはできます。ここでは、一度実行してしまった変更を過去にさかのぼって取り消すことはできない──という意味です
「トランザクション」という名称について
本文で述べたように、「トランザクション(transaction)」という名称は、DBMSの内部で実行されるデータベースに対する一連の処理を指します。
ところでこの名称、DBMSが当たり前になる以前のCOBOLなどで業務処理を作っていた人の中には、別の意味を示す言葉として受け取る人もいるかもしれません。というのは、かつては基本情報を記録する「マスターテーブル」に対して、日々書き換えられる販売や勤怠、在庫などの情報を「トランザクションテーブル」と呼んでいたからです。
過去の業務処理ではテーブルに対して『マスターとトランザクション』という分類が存在したのです。これは、あくまでプログラマーから見えるレベルでの、テーブルの用途を基準とした分類による呼称です。
transactionには「取引」の意味があるため、「マスター=基礎情報/トランザクション=取引情報」という形でテーブルの役割を明確にしていたのです。特にCOBOLなどの言語で作られた、DBMSを使用せず内部のファイル操作で処理を行うタイプの古いアプリケーションでは、上述のような名称がユーザー向けのマニュアルでも使われることがありました。
一方、DBMSによってブラックボックス化されたデータベース処理が当たり前となった現在のプログラミングでは、一般的に
基礎情報=被参照側
取引情報=参照側
という名称で役割を識別します。但し、厳密に言えば旧来のトランザクション(取引情報)が必ずしも参照側である訳ではありません。この名称は、テーブルの関連付け情報に基づいてDBMS側から見た形態を基にしています。 今では紛らわしいので、取引情報を記録したテーブルを「トランザクション・テーブル」と呼ぶことはありません。 |
|
|
|