ホームページ >データベース >mysql チュートリアル >MySQL でストアド プロシージャを使用する方法

MySQL でストアド プロシージャを使用する方法

Lisa Kudrow
Lisa Kudrow転載
2025-01-15 11:41:26886ブラウズ

通常、リレーショナル データベースを操作する場合、SELECT、INSERT、UPDATE、DELETE などのデータを取得または操作するための個別の構造化照会言語 (SQL) クエリを発行します。 アプリケーションコード内から直接。それらのステートメントは次のように機能します 基になるデータベース テーブルを直接操作します。同じなら ステートメントまたはステートメントのグループが複数のアプリケーション内で使用されている 同じデータベースにアクセスすると、それらは個別に重複することがよくあります。

MySQL は、他の多くのリレーショナル データベース管理システムと同様、 ストアド プロシージャの使用をサポートします。ストアド プロシージャはグループ 1 に役立ちます または複数の SQL ステートメントを共通名で再利用し、カプセル化します。 データベース自体内の共通のビジネス ロジック。このような手順により、 データベースにアクセスして取得するアプリケーションから呼び出されたり、 一貫した方法でデータを操作します。

ストアド プロシージャを使用すると、共通の再利用可能なルーチンを作成できます。 複数のアプリケーションにわたって使用されるタスク、データ検証の提供、 または、制限することでデータ アクセス セキュリティの追加レイヤーを提供します。 データベース ユーザーが基礎となるテーブルに直接アクセスして発行することを禁止します。

このチュートリアルでは、ストアド プロシージャとは何か、およびその方法について学びます。 データを返し、入力と入力の両方を使用する基本的なストアド プロシージャを作成します。 出力パラメータ。

截屏2025-01-15 11.29.41.png

MySQL への接続とサンプル データベースのセットアップ

このセクションでは、MySQL サーバーに接続し、 サンプル データベースを使用すると、このガイドの例に従うことができます。

このガイドでは、架空の車のコレクションを使用します。保管していただきます 現在所有している車のメーカー、モデル、製造年、

SQL データベース システムがリモート サーバーで実行されている場合は、ローカル マシンからサーバーに SSH で接続します。

ssh sammy@your_server_ip

次に、MySQL サーバーを開きます。プロンプト、sammyを MySQL ユーザーの名前に置き換えますaccount:

mysql -u sammy-p

という名前のデータベースを作成しますprocedures:

CREATE DATABASEprocedures;

データベースが正常に作成された場合、次のような出力を受け取りますこれ:

OutputQuery OK, 1 row affected (0.01 sec)

プロシージャ データベースを選択するには、次の USE ステートメントを実行します:

USEprocedures;

次の出力が表示されます:

ssh sammy@your_server_ip

データベースを選択した後、その中にサンプル テーブルを作成できます。テーブル車には、データベース内の車に関する簡略化されたデータが含まれます。次の列が保持されます:

  • make: この列には、最大 100 文字の varchar データ型を使用して表現された、各所有車のメーカーが保持されます。
  • model: これ列には、最大 100 文字の varchar データ型を使用して表現された車のモデル名が格納されます。
  • 年: この列には車のビルドが格納されます。
  • 値: この列には、最大 10 桁と小数点以下 2 桁の 10 進データ型を使用して車の値が保存されます。

以下を使用してサンプルテーブルを作成しますコマンド:

mysql -u sammy-p

次の出力が表示されたら、テーブルが作成されています:

CREATE DATABASEprocedures;

その後、次のコマンドを実行してサンプル データを cars テーブルにロードします。次の INSERT INTO 操作を実行しています:

OutputQuery OK, 1 row affected (0.01 sec)

INSERT INTO この操作により、サンプル スポーツ カーが 10 台追加され、そのうち 5 台がテーブルに追加されます。 ポルシェとフェラーリの 5 つのモデル。次の出力は、すべての 5 つの行が追加されました:

ssh sammy@your_server_ip

これで、ガイドの残りの部分に従って、SQL でストアド プロシージャの使用を開始する準備が整いました。

ストアド プロシージャの概要

MySQL および他の多くのリレーショナル データベースのストアド プロシージャ システムは、レイアウトされた 1 つ以上の命令を含む名前付きオブジェクトです。 その後、呼び出されたときにデータベースによってシーケンスで実行されます。で 最も基本的な例では、ストアド プロシージャは一般的なステートメントを以下に保存できます。 再利用可能なルーチン (データベースからデータを取得するなど) よく使われるフィルター。たとえば、次のストアド プロシージャを作成できます。 最後に指定された期間内に注文を行ったオンライン ストアの顧客を取得します 月数。最も複雑なシナリオでは、ストアド プロシージャは次のようなことができます。 ~の複雑なビジネス ロジックを記述する広範なプログラムを表す

ストアド プロシージャ内の一連の命令には、データを返したり操作したりする SELECT クエリや INSERT クエリなどの一般的な SQL ステートメントを含めることができます。さらに、ストアド プロシージャは以下を利用できます。

  • ストアド プロシージャに渡されるパラメータ、またはストアド プロシージャを通じて返されるパラメータ。
  • プロシージャ コード内で取得したデータを直接処理するための宣言された変数。
  • 条件文。 IF 命令や CASE 命令など、特定の条件に応じたストアド プロシージャ コード。
  • WHILE、LOOP、REPEAT などのループを使用すると、取得したデータの各行など、コードの一部を複数回実行できます。 set.
  • プロシージャにアクセスするデータベース ユーザーにエラー メッセージを返すなどのエラー処理命令。
  • 他のストアド関数の呼び出しデータベース内のプロシージャ。

プロシージャがその名前で呼び出されると、データベース エンジンはそのプロシージャを定義どおりに命令ごとに実行します。

データベース ユーザーは、次のことを行うための適切な権限を持っている必要があります。実行する 与えられた手順。この権限要件により、次の層が提供されます。 セキュリティ。ユーザーにアクセスを許可しながらデータベースへの直接アクセスを禁止します。 安全に実行できることが保証されている個々のプロシージャに割り当てられます。

ストアド プロシージャはデータベース サーバー上で直接実行されます。 すべての計算をローカルで実行し、結果を呼び出し側に返します。

プロシージャの動作を変更したい場合は、 データベース内のプロシージャとそれを使用するアプリケーションは、 新しいバージョンが自動的に選択されます。すべてのユーザーがすぐに開始します 新しいプロシージャ コードを調整する必要なく使用できます。

ストアド プロシージャの作成に使用される SQL コードの一般的な構造は次のとおりです。

mysql -u sammy-p

このコード部分の最初と最後の命令は DELIMITER // と DELIMITER ; です。通常、MySQL はセミコロン記号 (;) を使用します。 ステートメントを区切って、ステートメントの開始と終了を示します。もしあなたが MySQL コンソールで複数のステートメントを次のように区切って実行します。 セミコロンを使用すると、別のコマンドとして扱われて実行されます。 独立して、次から次へと。ただし、ストアド プロシージャでは、 連続して実行される複数のコマンドを囲みます。 呼ばれます。これは、MySQL に作成を指示するときに困難を引き起こします。 新しい手順。データベース エンジンはセミコロン記号を検出します。 ストアド プロシージャ本体で、実行を停止する必要があると考えられます。 声明。この状況では、意図されたステートメントは全体です プロシージャ作成コード。プロシージャ内の単一の命令ではありません。

この制限を回避するには、DELIMITER コマンドを使用して区切り文字を ; から一時的に変更します。 to // CREATE PROCEDURE の間 電話。次に、ストアド プロシージャ本体内のすべてのセミコロンが次のようになります。 そのままサーバーに渡されます。すべての手順が完了したら、 区切り文字は ; に戻ります。最後の DELIMITER ;.

新しいプロシージャを作成するコードの中心は、プロシージャの名前が後に続く CREATE PROCEDURE 呼び出しです:procedure_name 例では。プロシージャ名の後には、オプションのリストが続きます。 プロシージャが受け入れるパラメータ。最後の部分は手順です 本文を BEGIN ステートメントと END ステートメントで囲みます。内部にはプロシージャ コードがあり、これには SELECT クエリなどの単一の SQL ステートメントや、より複雑なコードを含めることができます。

END コマンドは、一般的なセミコロンではなく、一時的な区切り文字である // で終わります。

次のセクションでは、単一のクエリを囲むパラメータのない基本的なストアド プロシージャを作成します。

パラメータを使用しないストアド プロシージャの作成パラメータ

このセクションでは、メーカーと価格で降順に並べられた所有車のリストを返す単一の SQL SELECT ステートメントをカプセル化する最初のストアド プロシージャを作成します。

開始方法使用する SELECT ステートメントを実行すると、

ssh sammy@your_server_ip

データベースは次のようになります。車のテーブルから車のリストを返します。最初はメーカー順、次に 1 つのメーカー内で値の降順に並べられます。

mysql -u sammy-p

最も価値のあるフェラーリがリストの先頭にあり、最も価値の低いポルシェが一番下に表示されます。

このクエリは複数のアプリケーションで頻繁に使用されると想定します。 複数のユーザーが使用し、全員が確実に使用できるようにしたいと想定します。 結果を並べ替えるのとまったく同じ方法です。そのためには、 そのステートメントを再利用可能な名前で保存するストアド プロシージャ

このストアド プロシージャを作成するには、次のコード フラグメントを実行します:

CREATE DATABASEprocedures;

前のセクションで説明したように、最初と最後のコマンド (DELIMITER // および DELIMITER ;) は、プロシージャの作成中にセミコロン文字をステートメントの区切り文字として扱うのをやめるように MySQL に指示します。

CREATE PROCEDURE SQL コマンドの後には、プロシージャ名get_all_cars が続きます。これは、プロシージャの動作を最もよく説明するために定義できます。プロシージャ名の後に一対のかっこ () があります。 ここでパラメータを追加できます。この例では、手順は次のとおりです。 パラメータを使用するため、括弧は空です。次に、プロシージャ コード ブロックの開始と終了を定義する BEGIN コマンドと END コマンドの間に、前に使用した SELECT ステートメントがそのまま記述されます。

データベースは成功メッセージで応答します。

ssh sammy@your_server_ip

get_all_carsプロシージャがデータベースに保存され、呼び出されると、保存されたステートメントが次のように実行されます。 is.

保存されたストアド プロシージャを実行するには、CALL SQL コマンドの後にプロシージャ名を指定します。次のように新しく作成したプロシージャを実行してみてください。

mysql -u sammy-p

プロシージャを使用するために必要なのは、プロシージャ名get_all_carsだけです。以前に使用した SELECT ステートメントの一部を手動で入力する必要はなくなりました。データベースには、前に実行した SELECT ステートメントの出力と同じように結果が表示されます。

CREATE DATABASEprocedures;

これで、特定の方法で順序付けされた cars テーブルからすべての car を返す、パラメーターなしのストアド プロシージャが正常に作成されました。 。このプロシージャは複数のアプリケーションで使用できます。

次のセクションでは、 ユーザー入力に応じてプロシージャの動作を変更するパラメータ。


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

声明:
この記事はdigitalocean.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。