ホームページ >データベース >mysql チュートリアル >MySQL でストアド プロシージャを使用する方法
通常、リレーショナル データベースを操作する場合、SELECT、INSERT、UPDATE、DELETE などのデータを取得または操作するための個別の構造化照会言語 (SQL) クエリを発行します。 アプリケーションコード内から直接。それらのステートメントは次のように機能します 基になるデータベース テーブルを直接操作します。同じなら ステートメントまたはステートメントのグループが複数のアプリケーション内で使用されている 同じデータベースにアクセスすると、それらは個別に重複することがよくあります。
MySQL は、他の多くのリレーショナル データベース管理システムと同様、 ストアド プロシージャの使用をサポートします。ストアド プロシージャはグループ 1 に役立ちます または複数の SQL ステートメントを共通名で再利用し、カプセル化します。 データベース自体内の共通のビジネス ロジック。このような手順により、 データベースにアクセスして取得するアプリケーションから呼び出されたり、 一貫した方法でデータを操作します。
ストアド プロシージャを使用すると、共通の再利用可能なルーチンを作成できます。 複数のアプリケーションにわたって使用されるタスク、データ検証の提供、 または、制限することでデータ アクセス セキュリティの追加レイヤーを提供します。 データベース ユーザーが基礎となるテーブルに直接アクセスして発行することを禁止します。
このチュートリアルでは、ストアド プロシージャとは何か、およびその方法について学びます。 データを返し、入力と入力の両方を使用する基本的なストアド プロシージャを作成します。 出力パラメータ。
このセクションでは、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
データベースを選択した後、その中にサンプル テーブルを作成できます。テーブル車には、データベース内の車に関する簡略化されたデータが含まれます。次の列が保持されます:
以下を使用してサンプルテーブルを作成しますコマンド:
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 ステートメントを含めることができます。さらに、ストアド プロシージャは以下を利用できます。
プロシージャがその名前で呼び出されると、データベース エンジンはそのプロシージャを定義どおりに命令ごとに実行します。
データベース ユーザーは、次のことを行うための適切な権限を持っている必要があります。実行する 与えられた手順。この権限要件により、次の層が提供されます。 セキュリティ。ユーザーにアクセスを許可しながらデータベースへの直接アクセスを禁止します。 安全に実行できることが保証されている個々のプロシージャに割り当てられます。
ストアド プロシージャはデータベース サーバー上で直接実行されます。 すべての計算をローカルで実行し、結果を呼び出し側に返します。
プロシージャの動作を変更したい場合は、 データベース内のプロシージャとそれを使用するアプリケーションは、 新しいバージョンが自動的に選択されます。すべてのユーザーがすぐに開始します 新しいプロシージャ コードを調整する必要なく使用できます。
ストアド プロシージャの作成に使用される 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 サイトの他の関連記事を参照してください。