目次
ストアドルーチン(プロシージャとファンクション)が MySQL 5.1ではサポートされています。ストアドプロシージャはサーバが保存することができるSQLステートメントの組です。これが実行されると、クライアントは各ステートメントを発行し続ける必要がなくなり、代わりにストアドプロシージャを参照します。
MySQL中に保存されているルーチンとその利用に関する一般質問に対する答えは、項A.4. 「MySQL 5.1 FAQ — Stored Procedures」で見ることができます。更に、ストアドルーチンに関する一般的な質問に対する答えについては、項A.6. 「MySQL 5.1 FAQ — Stored Routines, Triggers, and Replication」をご参照ください。
ストアドルーチンが特に有用な幾つかの状況:
複数のクライアントアプリケーションが、複数の言語で書かれている場合、または異なるプラットフォームで作動するが、同じデータベースオペレーションを行う必要がある場合。
セキュリティを最優先する場合。例えば、銀行はすべての共通オペレーションにストアドプロシージャとファンクションを使います。これは一貫して安全な環境を提供するので、ルーチンは各オペレーションが適切にログされていることを保証します。このようなセットアップでは、アプリケーションとユーザは直接データベーステーブルにアクセス権は無く、特定のストアドルーチンのみ実行することができます。
サーバとクライアント間の通信を減らすことができるので、ストアドルーチンは性能を向上させます。より多くの作業がサーバ側で実行され、クライアント(アプリケーション)側では、より少ない作業が実行されるので、欠点はこれがデータベースサーバ上の負荷を増やすということです。(Web サーバのような)多くのクライアントマシンに対して、1つあるいは少数のデータベースサーバによってメンテナンスされる場合、これを考慮に入れてください。
ストアドルーチンはユーザがデータベースサーバの中にファンクションライブラリーを持つことも許します。内部にこのようなデザインを許容する(例えば、クラスを使うことによって)最近のアプリケーション言語が共有している特徴です。これらのクライアントアプリケーション言語の特徴を使用することは、データベースの使用範囲の外でもプログラマーにとって有益です。
MySQLはストアドルーチンに対して、IBMのDB2にも使われているSQL:2003構文に準じています。
ストアドルーチンのMySQLへの実装は進行途中です。この章で述べたすべての構文はサポートされており、全ての制約や拡張は適切文書化されます。ストアドルーチンの使用に対する制限については、項D.1. 「ストアド ルーチンとトリガの規制」を参照してください。
ストアドルーチンのバイナリ ログ実行については、項17.4. 「ストアドルーチンとトリガのバイナリログ」を参照してください。
再帰的なストアドプロシージャは、デフォルトで無効化されていますが、max_sp_recursion_depth
サーバシステム変数をゼロの値に設定することによって、サーバ上で有効化することができます。詳細については、項4.2.3. 「システム変数」
をご参照してください。
保存されたファンクションは再帰的にはなり得ません。項D.1. 「ストアド ルーチンとトリガの規制」 を参照してください。