mysqlストアドプロシージャストアドファンクション

WBOY
リリース: 2023-05-18 10:46:37
オリジナル
1045 人が閲覧しました

MySQL は、ストアド プロシージャやストアド関数などのデータベース オブジェクトの作成と使用をサポートする、一般的なリレーショナル データベース管理システムです。この記事では、MySQL ストアド プロシージャとストアド関数の概念、使用法、構文、例について詳しく説明します。

1. ストアド プロシージャとストアド関数とは何ですか?

ストアド プロシージャとストアド関数は、MySQL の 2 種類のデータベース オブジェクトです。これらはすべて MySQL サーバー側で作成でき、他のクライアント プログラムから呼び出して実行できます。これらに共通しているのは、一連の SQL ステートメントをカプセル化し、複雑なデータベース操作やビジネス ロジックを実装できることです。

ストアド プロシージャ (ストアド プロシージャ) は、他のプログラミング言語のサブルーチンや関数に似た、事前定義された SQL ステートメントのセットです。これらは単一の SQL ステートメントとして記述され、サーバーに保存され、必要なときに呼び出すことができます。ストアド プロシージャを使用すると、データのバッチ処理、トランザクションの実行、高速クエリなど、特定のビジネス要件を実装できます。ストアド プロシージャは、実行時にパラメータを受け入れることができ、実行後に結果を返すこともできます。

ストアド ファンクション (ストアド ファンクション) は、SQL クエリで呼び出すことができるプロシージャであり、入力パラメータを受け取り、単一の値を返します。ストアド プロシージャと同様に、ストアド関数も SQL ステートメントのコレクションです。ストアド関数は通常、値を計算、変換、または操作し、結果を呼び出し元に返すために使用されます。ストアド プロシージャとは異なり、ストアド関数は単一の値のみを返すことができ、一連の結果を返すことはできません。ストアド関数は、クエリやレポートで広く使用されています。

2. ストアド プロシージャとストアド ファンクションの利点

  1. データベース パフォーマンスの向上: ストアド プロシージャとストアド ファンクションをサーバー上で実行できるため、データ送信の負荷とネットワーク通信のオーバーヘッドが軽減されます。これにより、データベースのパフォーマンスが向上します。
  2. セキュリティの向上: ストアド プロシージャとストアド関数は、アクセス制御を利用してテーブルへのアクセスを制御できます。 SQL コードはデータベース サーバーに保存されるため、ユーザーは SQL コードに直接アクセスできず、特定の権限でのみ使用できます。
  3. コードの簡素化: ストアド プロシージャとストアド関数は SQL コードを再利用できるため、繰り返しの SQL クエリやロジック コードの記述が減り、コードの量が減って保守しやすくなります。
  4. 移植性: ストアド プロシージャとストアド関数は、さまざまなアプリケーションで再利用でき、さまざまなオペレーティング システムやデータベース プラットフォーム間で移植できます。

3. ストアド プロシージャの作成と使用

  1. ストアド プロシージャの作成:

ストアド プロシージャを作成するための構文は次のとおりです:

CREATE PROCEDURE procedure_name ([IN | OUT | INOUT] parameter datatype [, …])
BEGIN
SQL statements;
END;
ログイン後にコピー
  • procedure_name: ストアド プロシージャの名前
  • parameter: ストアド プロシージャのパラメータ。IN (デフォルト) 入力パラメータ、OUT 出力パラメータ、および INOUT (同時入出力) パラメーター。
  • datatype: パラメータのデータ型
  • SQL ステートメント: ストアド プロシージャのメイン ステートメント

たとえば、次のストアド プロシージャは金額と顧客 ID を入力し、その金額を顧客アカウント残高に追加します:

CREATE PROCEDURE add_amount(IN amt INT, IN cust_id INT)
BEGIN
UPDATE customers SET balance = balance + amt WHERE id = cust_id;
END;
ログイン後にコピー
  1. ストアド プロシージャを呼び出します:

ストアド プロシージャを呼び出すための構文は次のとおりです。

CALL procedure_name([parameter_value]);
ログイン後にコピー

たとえば、次のコードでは、作成したばかりの add_amount() ストアド プロシージャが呼び出されます。

CALL add_amount(100, 1);
ログイン後にコピー

上記のコードは、ID 1 の顧客の残高を 100 元増加させます。顧客テーブル。

4. ストアド関数の作成と使用

  1. ストアド関数の作成:

ストアド関数を作成するための構文は次のとおりです:

CREATE FUNCTION function_name ([parameter datatype [, …]])
RETURNS datatype
BEGIN
SQL statements;
RETURN return_value;
END;
ログイン後にコピー
  • function_name: ストアド関数の名前
  • parameter: ストアド関数のパラメータ
  • datatype: パラメータのデータ型
  • SQLステートメント: ストアド ファンクションのメイン ステートメント
  • return_value: ストアド ファンクションの戻り値

たとえば、次の例では、平均を計算するためのストアド ファンクションを作成します。 #

CREATE FUNCTION average (a INT, b INT)
RETURNS INT
BEGIN
DECLARE result INT;
SET result = (a + b) / 2;
RETURN result;
END;
ログイン後にコピー

    ストアド関数の呼び出し:
ストアド関数を呼び出すための構文は、ストアド プロシージャの呼び出しと似ています:

SELECT function_name([parameter_value]);
ログイン後にコピー

たとえば、次のコードです。作成したばかりのaverage()ストアド関数を呼び出します:

SELECT average(10, 20);
ログイン後にコピー

上記のコードは、(10 20)/2の結果である15を返します。

5. ストアド プロシージャとストアド関数の例

    ストアド プロシージャの例
次のストアド プロシージャは、すべての顧客の平均年齢を自動的に計算します。

CREATE PROCEDURE calc_avg_age()
BEGIN
DECLARE avg_age FLOAT;
SELECT AVG(YEAR(CURDATE()) - YEAR(birth_date)) INTO avg_age FROM customers;
INSERT INTO statistics (name, value) VALUES ('avg_age', avg_age);
END;
ログイン後にコピー

    ストアド関数の例
次のストアド関数は、2 つの日付の間の日数を返します:

CREATE FUNCTION days_between (date1 DATE, date2 DATE)
RETURNS INT
BEGIN
DECLARE num_days INT;
SET num_days = DATEDIFF(date2, date1);
RETURN num_days;
END;
ログイン後にコピー

さて、クリスマスから 2022 年の新年までの日数を知りたいのですが、次のコードを使用して上記のストアド関数を呼び出すことができます:

SELECT days_between('2022-12-25', '2023-01-01');
ログイン後にコピー
上記のコードは、間の日数である 7 を返します。 2 つの日付の日数。

6. 結論

これまで、MySQL ストアド プロシージャとストアド関数の概念、構文、例を理解しました。これらのオブジェクトは、SQL コードをより適切に整理し、データベースのパフォーマンスと保守性を向上させるのに役立ちます。実際のアプリケーションでは、ストアド プロシージャとストアド ファンクションは、データ ウェアハウス、ビジネス インテリジェンス、アプリケーション、その他の分野で広く使用されています。ただし、コードの可読性と保守性が低下する可能性があるため、過度に使用しないように注意してください。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!