MySQL は、ストアドルーチン (プロシージャーとファンクション) をサポートしています。 ストアドルーチンとは、サーバーに格納できる一連の SQL ステートメントです。 これが行われていると、クライアントは個々のステートメントを繰り返し発行し続ける必要はなく、代わりにストアドルーチンを参照できます。
ストアドルーチンは特に、次のような特定の状況で役立ちます。
クライアントアプリケーションが異なる言語で作成されているか、異なるプラットフォームで動作しているが、同じデータベース操作を実行する必要がある場合。
セキュリティーが最重要である場合。 たとえば、銀行では、すべての一般的な操作に対してストアドプロシージャーおよびストアドファンクションを使用します。 これにより一貫したセキュアな環境が得られ、ルーチンによってそれぞれの操作が正しく記録されるようになります。 このようなセットアップでは、アプリケーションおよびユーザーはデータベーステーブルに直接アクセスできませんが、特定のストアドルーチンだけを実行できます。
ストアドルーチンは、サーバーとクライアント間で送信する必要のある情報が少なくなるので、パフォーマンスを改善できます。 そのトレードオフでは、これによりサーバー側で行われる作業が増え、クライアント (アプリケーション) 側で行われる作業が少なくなるので、データベースサーバーでのロードが増大します。 1 台または少数のデータベースサーバーだけで多数のクライアントマシン (Web サーバーなど) にサービスを提供している場合にはこれを検討してください。
ストアドルーチンを使用すれば、データベースサーバーで関数のライブラリを保持することもできます。 これは、内部的に (たとえばクラスを使用して) このような設計を可能にする、現代のアプリケーション言語で共有されている機能です。 これらのクライアントアプリケーションの言語機能を使用すると、データベース使用のスコープ外でもプログラマにとって利点があります。
MySQL はストアドルーチンについて SQL:2003 構文に従っており、これは IBM の DB2 でも使用されています。 ここで説明するすべての構文はサポートされており、すべての制限と拡張が適宜ドキュメント化されています。
追加のリソース
ストアドプロシージャーおよびストアドファンクションを扱うときに、ストアドプロシージャーのユーザーフォーラムが役立ちます。
MySQL のストアドルーチンに関するよくある質問とその回答については、セクションA.4「MySQL 8.0 FAQ: ストアドプロシージャーおよびストアドファンクション」を参照してください。
ストアドルーチンの使用にはいくつかの制限があります。 セクション25.8「ストアドプログラムの制約」を参照してください。
ストアドルーチンのバイナリロギングは、セクション25.7「ストアドプログラムバイナリロギング」で説明しているように行われます。