mysqlストアドプロシージャ関数

PHPz
リリース: 2023-05-18 09:50:37
オリジナル
663 人が閲覧しました

MySQL は、ストアド プロシージャと関数の機能を備えた一般的なデータベース管理システムです。この記事では、MySQL のストアド プロシージャとストアド関数の概念、使用法、例を紹介します。

1. ストアド プロシージャ

  1. 概念

ストアド プロシージャは、データベースに保存して繰り返し実行できる、プリコンパイルされた SQL ステートメントのセットです。データの挿入、更新、削除などの複雑なデータベース操作を実行するためによく使用されます。ストアド プロシージャはパラメータを受け取り、1 つ以上の結果セットを返すことができます。

  1. ストアド プロシージャを作成する

CREATE PROCEDURE ステートメントを使用してストアド プロシージャを作成します。構文は次のとおりです。パラメータはオプションです: IN は入力パラメータを表し、OUT は出力パラメータを表し、INOUT は入力パラメータと出力パラメータの両方を表します。 datatype はデータ型を表し、size は長さを表し、NOT DETERMINISTIC は決定性を表し、SQL SECURITY はアクセス制御レベルを表し、COMMENT はコメントを表します。BEGIN と END の間にはストアド プロシージャ内の SQL ステートメントのセットがあります。

例:

CREATE PROCEDURE procedure_name ([IN | OUT | INOUT] parameter_name datatype [(size)]) [NOT DETERMINISTIC] [SQL SECURITY {DEFINER | INVOKER}] [COMMENT ‘string’]
BEGIN
-- 存储过程内部语句
END;
ログイン後にコピー

ストアド プロシージャの名前は select_all_users で、パラメータはなく、内部で SELECT * FROM users ステートメントを実行します。つまり、users テーブル内のすべてのデータをクエリします。

ストアド プロシージャの呼び出し
  1. CALL ステートメントを使用してストアド プロシージャを呼び出します。構文は次のとおりです。
CREATE PROCEDURE select_all_users ()
BEGIN
SELECT * FROM users;
END;
ログイン後にコピー

例:

CALL procedure_name(param1, param2, ...);
ログイン後にコピー

このステートメントは、前に作成した select_all_users ストアド プロシージャが実行されます。

ストアド プロシージャの削除
  1. ストアド プロシージャを削除するには、DROP PROCEDURE ステートメントを使用します。構文は次のとおりです:
CALL select_all_users();
ログイン後にコピー

例:

DROP PROCEDURE IF EXISTS procedure_name;
ログイン後にコピー

このステートメントは、select_all_users という名前のストアド プロシージャを削除します。

ストアド プロシージャの例
  1. 次は、入力パラメータを受け取り、そのパラメータを 2 で乗算して出力する簡単なストアド プロシージャの例です。 #ストアド プロシージャを呼び出します:
DROP PROCEDURE IF EXISTS select_all_users;
ログイン後にコピー

出力結果は 10 です。

2. 関数

概念

    関数は、値を返し、0 個以上の入力パラメーターを受け取ることができる特別なストアド プロシージャです。ストアド プロシージャとは異なり、関数はデータ定義ステートメント (CREATE、ALTER、DROP) やトランザクション制御ステートメント (COMMIT、ROLLBACK) を実行できません。
関数の作成

    関数を作成するには、CREATE FUNCTION ステートメントを使用します。構文は次のとおりです:
  1. CREATE PROCEDURE double_num (IN num INT, OUT result INT)
    BEGIN
    SET result = num * 2;
    END;
    ログイン後にコピー
  2. そのうち、parameter_name と datatype は、次のとおりです。入力パラメータの名前と型、size は長さを表し、return_datatype は戻り値のデータ型を表し、BEGIN と END の間にはストアド プロシージャ内の SQL ステートメントのセットが入ります。

例:

CALL double_num(5, @result);
SELECT @result;
ログイン後にコピー

関数の名前は double_num、入力パラメータは num、戻り値の型は INT で、num 値が 2 倍されて返されます。

関数の呼び出し

    SELECT ステートメントを使用して関数を呼び出し、結果をクエリします:
  1. CREATE FUNCTION function_name ([parameter_name datatype [(size)]] [, ...]) RETURNS return_datatype
    BEGIN
    -- 函数内部语句
    END;
    ログイン後にコピー
  2. 出力結果は 10 です。

関数の削除

    関数を削除するには、DROP FUNCTION ステートメントを使用します。構文は次のとおりです:
  1. CREATE FUNCTION double_num (num INT) RETURNS INT
    BEGIN
    RETURN num * 2;
    END;
    ログイン後にコピー
  2. 例:
SELECT double_num(5);
ログイン後にコピー

このステートメントは、double_num という名前の関数を削除します。

関数の例

    次は、数値の階乗を求める簡単な関数の例です:
  1. DROP FUNCTION IF EXISTS function_name;
    ログイン後にコピー
  2. 関数を呼び出します:
DROP FUNCTION IF EXISTS double_num;
ログイン後にコピー

出力結果は120です。

3. ストアド プロシージャと関数の違い

ストアド プロシージャと関数の主な違いは次のとおりです:

戻り値の型が異なります: ストアド プロシージャは、次のようにする必要はありません。値を返しますが、関数は値を返す必要があります。

さまざまな処理方法: ストアド プロシージャは通常、挿入、更新、削除などの一部の操作を実行するために使用され、関数は数学的計算や文字列処理によく使用されます。
  1. さまざまなパラメーター受け渡しメソッド: ストアド プロシージャでは、IN、OUT、および INOUT パラメーター受け渡しメソッドを使用できますが、関数では IN パラメーター受け渡しメソッドのみを使用できます。
  2. 呼び出し方法は異なります。ストアド プロシージャは CALL ステートメントを使用して呼び出されます。関数は SELECT、WHERE、および HAVING 句で呼び出すことができます。
  3. 4. 概要
  4. この記事では、MySQL のストアド プロシージャとストアド関数の概念、使用法、および例を紹介します。ストアド プロシージャとストアド関数はデータベース管理の重要なツールであり、データベースの効率とセキュリティを向上させることができます。実際の開発では、特定のニーズに応じてストアド プロシージャまたは関数を選択する必要があります。

以上がmysqlストアドプロシージャ関数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート