MySQL でプロシージャと関数を使用する場合
データベース プログラマーとして、データ操作を伴う操作を実行する必要がある状況に遭遇することがあります。または回収。 MySQL は、これらの目的のために、プロシージャと関数という 2 つの強力なツールを提供します。これらの主な違いを理解すると、特定の要件に適したツールを選択するのに役立ちます。
プロシージャと関数の主な違い
主な違いは、それらの目的と機能にあります。呼び出しメソッド:
-
プロシージャ:プロシージャは値を返しません。代わりに、CALL ステートメントを使用して呼び出して、テーブルの変更やレコードの処理などの操作を実行します。
-
関数: 一方、関数は単一の値を返し、式内で呼び出され、計算に使用されます。 CALL ステートメントで呼び出すことはできません。
構文の違い
ルーチン作成の構文は、プロシージャと関数で若干異なります。
-
プロシージャのパラメータ: プロシージャパラメータは入力専用、出力専用、またはその両方として定義でき、プロシージャが出力パラメータを使用して呼び出し元に値を渡すことができます。関数には入力パラメータのみがあります。
-
戻り値: 関数は RETURNS 句を使用して戻り値の型を宣言し、値を提供するために本体内に少なくとも 1 つの RETURN ステートメントを含める必要があります。プロシージャには RETURNS 句や RETURN ステートメントは必要ありません。
呼び出しと使用法
-
プロシージャの呼び出し: プロシージャが呼び出されます。 CALL ステートメントを使用すると、入出力を通じて値の受け渡しが可能になります。パラメータ。
-
関数の呼び出し: 関数は他の関数と同様にステートメント内で呼び出され、式の評価中にスカラー値を返します。
-
パラメータ修飾: パラメータin プロシージャは、IN、OUT、または INOUT として指定できます。関数パラメータは常に IN とみなされます。
データベース スコープとストレージ
-
データベース アソシエーション: ストアド ルーチン (プロシージャと関数) は特定のデータベースに関連付けられており、データベースにドロップされます。削除。
-
名前空間: プロシージャと関数には別個の名前空間があり、同じデータベース内で名前の重複が可能です。
その他の相違点
核となる違い以外にも、いくつかの違いが存在します。
-
動的 SQL: プロシージャは動的 SQL をサポートしますが、関数とトリガーはサポートしません。
-
コンパイル時間: ストアド プロシージャはプリコンパイルされますが、関数はサポートされません。実行時に解析およびコンパイルされます。
-
データベース状態: プロシージャはコミット ステートメントを介してデータベースの状態を変更できますが、関数は変更できません。
-
再帰機能: ストアド プロシージャは再帰的にできますが、関数は再帰できません。
-
制限: 関数には、関数内から呼び出されたとき、またはストアド プロシージャに適用される特定の制限があります。
これらの違いを理解すると、特定のデータベース操作や計算のために MySQL のプロシージャと関数のどちらを効果的に選択できるようになります。
以上がMySQL プロシージャと関数: いつどちらを使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。