目次
MySQL への接続とサンプル データベースのセットアップ
ストアド プロシージャの概要
パラメータを使用しないストアド プロシージャの作成パラメータ
ホームページ データベース mysql チュートリアル MySQL でストアド プロシージャを使用する方法

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

Jan 15, 2025 am 11:41 AM

通常、リレーショナル データベースを操作する場合、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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

MySQLでインデックスを使用するよりも、フルテーブルスキャンがいつ速くなるのでしょうか? MySQLでインデックスを使用するよりも、フルテーブルスキャンがいつ速くなるのでしょうか? Apr 09, 2025 am 12:05 AM

完全なテーブルスキャンは、MySQLでインデックスを使用するよりも速い場合があります。特定のケースには以下が含まれます。1)データボリュームは小さい。 2)クエリが大量のデータを返すとき。 3)インデックス列が高度に選択的でない場合。 4)複雑なクエリの場合。クエリプランを分析し、インデックスを最適化し、オーバーインデックスを回避し、テーブルを定期的にメンテナンスすることにより、実際のアプリケーションで最良の選択をすることができます。

Windows 7にMySQLをインストールできますか? Windows 7にMySQLをインストールできますか? Apr 08, 2025 pm 03:21 PM

はい、MySQLはWindows 7にインストールできます。MicrosoftはWindows 7のサポートを停止しましたが、MySQLは引き続き互換性があります。ただし、インストールプロセス中に次のポイントに注意する必要があります。WindowsのMySQLインストーラーをダウンロードしてください。 MySQL(コミュニティまたはエンタープライズ)の適切なバージョンを選択します。インストールプロセス中に適切なインストールディレクトリと文字セットを選択します。ルートユーザーパスワードを設定し、適切に保ちます。テストのためにデータベースに接続します。 Windows 7の互換性とセキュリティの問題に注意してください。サポートされているオペレーティングシステムにアップグレードすることをお勧めします。

MySQL:簡単な学習のためのシンプルな概念 MySQL:簡単な学習のためのシンプルな概念 Apr 10, 2025 am 09:29 AM

MySQLは、オープンソースのリレーショナルデータベース管理システムです。 1)データベースとテーブルの作成:createdatabaseおよびcreateTableコマンドを使用します。 2)基本操作:挿入、更新、削除、選択。 3)高度な操作:参加、サブクエリ、トランザクション処理。 4)デバッグスキル:構文、データ型、およびアクセス許可を確認します。 5)最適化の提案:インデックスを使用し、選択*を避け、トランザクションを使用します。

mysqlとmariadbは共存できますか mysqlとmariadbは共存できますか Apr 08, 2025 pm 02:27 PM

MySQLとMariaDBは共存できますが、注意して構成する必要があります。重要なのは、さまざまなポート番号とデータディレクトリを各データベースに割り当て、メモリ割り当てやキャッシュサイズなどのパラメーターを調整することです。接続プーリング、アプリケーションの構成、およびバージョンの違いも考慮する必要があり、落とし穴を避けるために慎重にテストして計画する必要があります。 2つのデータベースを同時に実行すると、リソースが制限されている状況でパフォーマンスの問題を引き起こす可能性があります。

MySQLユーザーとデータベースの関係 MySQLユーザーとデータベースの関係 Apr 08, 2025 pm 07:15 PM

MySQLデータベースでは、ユーザーとデータベースの関係は、アクセス許可と表によって定義されます。ユーザーには、データベースにアクセスするためのユーザー名とパスワードがあります。許可は助成金コマンドを通じて付与され、テーブルはCreate Tableコマンドによって作成されます。ユーザーとデータベースの関係を確立するには、データベースを作成し、ユーザーを作成してから許可を付与する必要があります。

RDS MySQL Redshift Zero ETLとの統合 RDS MySQL Redshift Zero ETLとの統合 Apr 08, 2025 pm 07:06 PM

データ統合の簡素化:AmazonrdsmysqlとRedshiftのゼロETL統合効率的なデータ統合は、データ駆動型組織の中心にあります。従来のETL(抽出、変換、負荷)プロセスは、特にデータベース(AmazonrdsmysQlなど)をデータウェアハウス(Redshiftなど)と統合する場合、複雑で時間がかかります。ただし、AWSは、この状況を完全に変えたゼロETL統合ソリューションを提供し、RDSMYSQLからRedshiftへのデータ移行のための簡略化されたほぼリアルタイムソリューションを提供します。この記事では、RDSMysQl Zero ETLのRedshiftとの統合に飛び込み、それがどのように機能するか、それがデータエンジニアと開発者にもたらす利点を説明します。

バングラ部分モデル検索のlaravelEloquent orm) バングラ部分モデル検索のlaravelEloquent orm) Apr 08, 2025 pm 02:06 PM

LaravelEloquentモデルの検索:データベースデータを簡単に取得するEloquentormは、データベースを操作するための簡潔で理解しやすい方法を提供します。この記事では、さまざまな雄弁なモデル検索手法を詳細に紹介して、データベースからのデータを効率的に取得するのに役立ちます。 1.すべてのレコードを取得します。 ALL()メソッドを使用して、データベーステーブルですべてのレコードを取得します:useapp \ models \ post; $ post = post :: all();これにより、コレクションが返されます。 Foreach Loopまたはその他の収集方法を使用してデータにアクセスできます。

MySQL:初心者向けのデータ管理の容易さ MySQL:初心者向けのデータ管理の容易さ Apr 09, 2025 am 12:07 AM

MySQLは、インストールが簡単で、強力で管理しやすいため、初心者に適しています。 1.さまざまなオペレーティングシステムに適した、単純なインストールと構成。 2。データベースとテーブルの作成、挿入、クエリ、更新、削除などの基本操作をサポートします。 3.参加オペレーションやサブクエリなどの高度な機能を提供します。 4.インデックス、クエリの最適化、テーブルパーティション化により、パフォーマンスを改善できます。 5。データのセキュリティと一貫性を確保するために、バックアップ、リカバリ、セキュリティ対策をサポートします。

See all articles