MySQL のプロシージャと関数: 適切なツールの選択
MySQL はプロシージャと関数の両方をストアド ルーチンとして提供しますが、それらは目的が異なります。
キーについて違い
主な違いは、それらの呼び出しと使用方法にあります。
-
プロシージャ: CALL ステートメントで呼び出され、ステートメントを使用せずに操作を実行します。任意の値を返します。これらは、テーブルの変更、レコードの処理、および出力パラメータの提供を行うことができます。
-
関数: 式内で呼び出されると、単一の値を呼び出し元に直接返し、追加の値を返すことはできません。
構文と構造
プロシージャ:
CREATE PROCEDURE proc_name ([parameters])
[characteristics]
routine_body
ログイン後にコピー
関数:
CREATE FUNCTION func_name ([parameters])
RETURNS data_type
[characteristics]
routine_body
ログイン後にコピー
- 関数にはRETURN 値の宣言はプロシージャでは行われますが、ではありません。
- プロシージャ パラメータは入力、出力、またはその両方にすることができますが、関数パラメータは入力のみです。
呼び出しと実行
- プロシージャは CALL ステートメントを使用して呼び出されます。
- 関数は他の関数と同様に、式またはステートメント内で参照されます。
その他の主な違い
- プロシージャは結果セットを生成できますが、関数は生成しません。
- プロシージャでは動的 SQL を使用できますが、関数では使用できません。
- 関数は次のとおりです。
- 関数はデータベースの状態に影響を与えませんが、プロシージャは影響を及ぼします。
- ストアド プロシージャは再帰的ですが、ストアド関数は再帰的ではありません。
- ストアド関数では FLUSH ステートメントを使用できませんが、ストアド プロシージャでは使用できます。
When使用する
-
関数: 計算または入力に基づくデータの取得に使用します。
-
プロシージャ: 複雑な場合に使用します操作、データベース状態の変更、複数の値の戻し、または結果の生成
次のシナリオを考えてみましょう:
商品の価格と割引に基づいて顧客の注文の合計コストを計算する必要がある場合は、関数の使用を検討してください。
顧客情報をデータベースに挿入し、在庫レベルを更新し、新しく作成した顧客 ID を返す場合は、ストアド プロシージャを使用します。
以上がMySQL プロシージャと関数: いつどちらを使用するか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。