- ベストアンサー
ストアドプロシージャでトランザクション処理の方法
- ストアドプロシージャでトランザクション処理を行うための方法を解説します。トランザクション処理をすることで、複数の操作をまとめて実行し、エラーが発生した場合には途中の操作をロールバックすることができます。
- 複数のテーブルの行を一括削除する際にもトランザクション処理を利用することができます。例えば、テーブルAの行を削除した後でテーブルBの行を削除する必要がある場合、トランザクション処理を使用することで、両方の操作を一連の処理として実行することができます。
- ストアドプロシージャを使用しなくても、トランザクション処理を行うことは可能です。データベースの操作において、トランザクション処理は重要な要素となっており、正確な処理を行うためには積極的に活用することが推奨されています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
私も気になって調べてみました。 単純な語句で検索するだけではなかなかヒットしませんね。。 こういう場所で知識を共有していきたいところです。 実際に実行して試したわけではないので、動作の保障はしかねますが、 下記のような記述でロールバックを実現できるとの記載を見つけました。 CREATE PROCEDURE proc(....., ...) BEGIN DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN ROLLBACK; END; START TRANSACTION; : : : COMMIT; END; http://ameblo.jp/hotbrain/entry-10477377702.html http://dev.mysql.com/doc/refman/5.1/ja/declare-handlers.html DECLARE ... BEGIN ... END が catch, START TRANSACTION ... COMMIT が try みたいなイメージでしょうか、よくわかりませんが。 DECLAREの後とFORの後のキーワードには幾つか選択肢があるようなので、 ご自信の実現したい処理に応じて使い分けてみてください。 それから、机上の空論をひとつ。 上記のような記述をした場合でも、ストレージエンジンの差異による トランザクション処理実行の可否はあると思っています。 トランザクション処理が可能なのはinnoDBのみ、MyISAMでは不可能です。 http://d.hatena.ne.jp/akio0911/20080327/1206586425 > 質問者様 既知でしたらすみません。 > 質問者様、閲覧者様 ここまでの内容に誤りがありましたら、ご指摘ください。 よろしくお願いします。