アプリケーション開発でデータベースを利用する新人プログラマに向けて、SQLおよびT-SQLを短期間で理解できるよう、開発現場ですぐに必要となる内容を中心に解説する。(編集部)
主な内容
--Page 1--
▼トランザクションの概念
▼トランザクションが必要な場面とは
--Page 2--
▼トランザクションの構文
▼TRY〜CATCH文によるエラー検知
--Page 3--
▼トランザクションを組み込んだストアドプロシージャの作成
▼まとめ
SQLの入門解説として始まった本連載も、いよいよ今回で最終回となりました。今回は、これまで3回にわたって解説してきたストアドプロシージャの集大成として、トランザクションを利用した高度なストアドプロシージャの作成と解説を行います。
これまでの連載では、データベースへの更新処理として、単一の処理を行うINSERT文やUPDATE文を取り上げてきました。SQLを利用したこのようなデータ更新処理を行う際、複数の更新処理を連続して実行し、1つの関連性のある集まりとして管理する必要があるものがあります。SQLでは、このような複数のデータ更新処理を1つの単位にまとめ、管理することが可能です。この処理単位のことをトランザクションと呼びます。
トランザクションの利用が必要となるのは、複数の更新処理を連続して行う際に、すべての処理が成功したときにのみデータベースへの変更を有効としなければならないような場合です。トランザクションを利用することで、何らかの原因によって、一部の処理が正しく実行されなかったときには、すべての更新処理をキャンセルし、作業全体を取り消すことが可能になります。
トランザクションが必要となる簡単な例として、銀行の入出金システムを例にして考えてみましょう。
銀行の業務の中では、指定の口座から別の口座にお金を移動させることが多くあります。
例えば、Aさんの口座から50万円をBさんの口座に、という具合です。このような処理を行う場合は、Aさんの口座残高を減らす処理と、Bさんの口座残高を増やす処理を連続して行う必要があります。
もし、トランザクションを利用せずにこの連続処理を実行し、Bさんの口座に対する処理に失敗した場合、問題が発生してしまいます。Aさんの口座からは預金が減る一方、Bさんの口座残高は増えず、お金が消えてしまうことになり、データに不整合が発生するからです(図1)。
このような問題は、トランザクションを利用して解決することができます。
先の例で言えば、Aさんの口座に対する処理、Bさんの口座に対する処理を1つのトランザクションとしてまとめ、すべての処理が成功した場合にのみ、口座に対する変更内容を確定するようにします。また、処理が一部でも失敗した場合は、すべての処理が取り消されます。このため、口座に対する変更は発生せず、データの整合性が維持されます。
トランザクションは例として取り上げた問題以外にも、同時実行制御など、さまざまな問題に対する対処が可能です。今回は、処理が失敗したら全体を取り消すことができるこのトランザクションの機能を、ストアドプロシージャに組み込んでみます。
Copyright © ITmedia, Inc. All Rights Reserved.