SQLってどう使う?―その3 トランザクションの扱い

鈴木浩司(日本オラクル)
2007-12-07 07:00:00
  • このエントリーをはてなブックマークに追加

データの確定と中止(コミットとロールバック)

 トランザクションによる処理が正常に終了した場合に、その変更処理を有効な結果と確定し、データベースに反映することをコミットといいます。そのとき、「トランザクションが完了した」ことを認識させるために、「COMMIT」という命令を発行します。また、トランザクションによる処理の途中で何らかの障害が発生した場合に、それまでの変更処理を無効なものとし、トランザクションが実行される前の状態に戻すことをロールバックといいます。このとき、「トランザクションが中止された」ことを認識させるために「ROLLBACK」という命令を発行します。一度COMMITを発行しトランザクションを完了すると、変更した内容はROLLBACKを発行しても元のデータに戻すことが出来なくなります。

図2. 銀行振込みのトランザクション

 この「COMMIT」や「ROLLBACK」はSQLの命令の仲間です。これまでの連載の中でお話してきた3つあるSQLの種類の中の「データ制御言語(DCL)」がこの「COMMIT」や「ROLLBACK」になります。

データの同時更新

 データベースには様々なデータが入っており、常にデータの検索、更新が行われています。あるデータへ同時に更新作業が起こるとデータの不整合が起こる可能性があります。

図3. データの同時更新

 AさんがBさんへ5万円振り込みます。この作業が完了していないうちに、Bさんが3万円引き出します。この場合、後から作業を行ったBさんの更新データだけが有効になってしまい、Bさんの残高は7万円ということになってしまいます。

 正しくは、12万円です。これを正しくシステムで実現する為には、排他制御を利用します。

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]