MySQLストアドプロシージャの原理と使用法の詳細な説明

MySQLストアドプロシージャの原理と使用法の詳細な説明

この記事では、例を使用して、MySQL ストアド プロシージャの原理と使用方法を説明します。ご参考までに、詳細は以下の通りです。

この記事の内容:

  • ストアドプロシージャとは
  • ストアドプロシージャの作成
  • ストアドプロシージャの使用
  • ストアドプロシージャを表示する
  • ストアドプロシージャを変更する
  • ストアドプロシージャの削除

リリース日: 2018-04-17


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

  • ストアドプロシージャは一連のSQL文を保存する
  • 以下は、多くの MySQL 書籍に記載されているストアド プロシージャの典型的な要件シナリオです。 image
  • ストアド プロシージャは一連の SQL ステートメントを格納します。これにより操作が簡素化され一連の操作を繰り返し実行する必要がなくなります。必要なときにストアド プロシージャを呼び出すだけです。
  • 一般的に言えば、ストアド プロシージャの機能は関数の機能に似ていると考えられます (関数についてはすでに学習しているはずです)。ただし、ストアド プロシージャには戻り値がないことに注意すれば、関数を使用できるシナリオに基づいてストアド プロシージャを理解できます。

補充:

  • ストアド プロシージャとトリガーの違い: トリガーは、イベントをトリガーするときに一連のステートメントを実行します。一方、ストアド プロシージャは、呼び出されると、状況に応じて「別の一連のステートメント」の実行も検討します。
  • ストアド プロシージャと関数の違い: 関数には戻り値がありますが、ストアド プロシージャには戻り値がありません (そのため、SELECT ステートメントでは使用できません)。

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

  • プロシージャを作成します。ストアド プロシージャ名 ([パラメータ リスト]) で、SQL ステートメントを開始します。終了です。
    • パラメータリストの形式は次のとおりです: [type 修飾変数名 データ型]
      • パラメータ リストには独自の型制限があります。この型制限はデータ型とは異なります。パラメータのスコープが制限されます。
        • in: このパラメータはストアド プロシージャに渡されるものに限定されます。値渡しなので、変数または定数データにすることができます [ in によって変更されたパラメータは、通常、何らかの条件としてストアド プロシージャに渡され、ストアド プロシージャによって変更されることはありません]
        • out: このパラメータは、ストアド プロシージャによって渡される値に制限されます。値が返されるため、このパラメータは変数である必要があります。 [out によって変更された変数には、ストアド プロシージャ内で値が割り当てられ、変更された値がプロシージャの外部で取得できるようになります。]
        • inout: inout は上記 2 つを組み合わせたものです。ストアド プロシージャ内で使用でき、外部で変更して使用することもできます。値を返すため、このパラメーターは変数である必要があります。
  • 理論的には、複数の選択をすばやく使用したい場合や、データから複数の値を抽出して変数に割り当てたい場合など、簡潔なコードが必要なあらゆる状況でストアド プロシージャを使用できます。そのため、以下では使用方法のみを示し、適用シナリオについては説明しません。
    • 1: パラメータは渡されず、特定のコードのみが実行されます
    • 2. パラメータを渡し、それをコード実行の条件として使用する
    • 3. パラメータを渡し、それを条件として使用してコードを実行し、変数を使用して結果を取得します。
    • [次の呼び出しは呼び出しプロセスです]
-- 最も簡単な例は、プロシージャ myselect() を作成します。
始める 
  @@バージョンを選択します。
終わり;
プロシージャ getInfo(in mname varchar(15)) を作成します。
始める 
mnameを選択します。
終わり;
myselect() を呼び出す
getInfo("lilie"); を呼び出します。
-- パラメータを渡すことで指定されたコンテンツを取得できるプロシージャ getInfo2(in mname varchar(15)) を作成します。
始める 
name = mname の学生から * を選択します。
終わり;
getInfo2("lilei") を呼び出します。
-- 結果を変数に代入し、外部作成プロシージャ getInfo3(in mname varchar(15),out oname varchar(15)) に渡します。
始める 
name =mname の student から oname に名前を選択します。
終わり;
getInfo3("lilei",@mname); を呼び出します。
@mname を選択します。

補充:

  • トリガーと同様に、コマンド ライン モードでストアド プロシージャを作成する場合は、コマンド ターミネータを変更する必要があります。
  • 特別なオプションもいくつかあり、それらは([パラメータリスト])の後、beginの前に記述されます。
    • コメント: このストアドプロシージャの説明です
      プロシージャ myselect2() を作成する
      コメント「私の一連のSQL文」
      始める 
        学生から*を選択します。
        クラスから*を選択します。
      終わり;
      作成手順 myselect2 を表示します。
    • 他にもSQLセキュリティなどのオプションがいくつかあります。興味があれば、Baiduで検索してみてください。ここでは説明しません。この知識ポイントについてだけ述べます。

ストアド プロシージャの使用:

  • ストアド プロシージャを呼び出します: ストアド プロシージャ名 () を呼び出します。
  • パラメータを使用してストアド プロシージャを呼び出す: call stored procedure name (parameters);
    • in 型の場合、パラメータは値または変数になります。
    • out\inout型の場合、パラメータは変数である必要があります
    • すべての MySQL 変数は @ で始まる必要があります。
    • 例: call myselect("lilei",@variable name); 例: call myselect(@variable name,@variable name)

以下で呼び出されるストアド プロシージャは、上記で作成されたストアド プロシージャで定義されたストアド プロシージャです。

myselect() を呼び出す

getInfo("lilie"); を呼び出します。

@mname="lilei" を設定します。
getInfo(@mname); を呼び出します。

getInfo3("lilei",@mname); を呼び出します。

変数の使用:

  • out と inout は、ストアド プロシージャによって変更される変数を変更できますが、この変更はストアド プロシージャの呼び出しが終了するまで成功しません [プロシージャ内にそれを変更するコマンドがある場合、このコマンドの後に変数をチェックして、グローバル変数は変更されておらず、ローカル変数のみが変更されていることがわかります]。
  • すべての MySQL 変数は @ で始まる必要があります。
  • ストアド プロシージャでは、select variable name を使用してローカル変数を使用できます。select @variable name を使用してグローバル変数を使用できます。
  • 特定の変数の定義と使用については、私の別のブログ投稿で説明します。ハイパーリンク: MySQL 変数

ストアド プロシージャを表示します。

  • ストアド プロシージャの作成ステートメントを表示します: show create procedure ストアド プロシージャ名;
  • ストアド プロシージャのステータスを表示します: show procedure status; [表示される内容には、作成時間、コメント、定義されたユーザー、セキュリティ タイプなどが含まれます]

ストアド プロシージャを変更します。

  • ストアド プロシージャを変更する場合、変更できるのはそれらのオプションのみです (具体的なオプションについてはここでは説明しません。知りたい場合は Baidu で検索してください)。受信パラメーターや送信パラメーター、または SQL ステートメントを変更することはできません。
  • プロシージャのストアド プロシージャ名オプションを変更します。
    • image

ストアド プロシージャを削除します。

  • 構文: drop procedure ストアド プロシージャ名;
  • 例:
  • プロシージャ getInfo を削除します。

MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL ストアド プロシージャ スキル」、「MySQL 共通関数の概要」、「MySQL ログ操作スキル」、「MySQL トランザクション操作スキルの概要」、および「MySQL データベース ロック関連スキルの概要」

この記事が皆様のMySQLデータベース設計に役立つことを願っています。

以下もご興味があるかもしれません:
  • MySQL ストアド プロシージャでの変数の定義と割り当て
  • MySQLストアドプロシージャの詳細な説明
  • MySQL ストアド プロシージャ カーソル ループの使用の概要
  • MySQL ストアド プロシージャの例 (トランザクション、出力パラメータ、ネストされた呼び出しを含む)
  • MySql ストアド プロシージャと関数の詳細な説明
  • mysql クエリ データベース ストアド プロシージャと関数ステートメント
  • MySQL のストアド プロシージャの分析例とストアド プロシージャの呼び出し方法
  • MySQL ストアド プロシージャの動的 SQL で戻り値を取得する方法の詳細な説明
  • MySQL ストアド プロシージャで動的 SQL ステートメントを実行する方法
  • MySQL ストアド プロシージャでカーソル ループを終了して継続する例
  • MySQL ストアドプロシージャと関数の違い

<<:  Vue プロジェクトでのスキャンコード決済の実装例 (デモ付き)

>>:  独自のサーバーを素早く構築する方法の詳細なチュートリアル(Java 環境)

推薦する

MySQLグループリンクの使用に関する詳細な説明

MYSQL におけるグループ化とリンクは、データベースの操作やデータのやり取りで最もよく使用される ...

シェアしたい絶妙なApple風無料アイコン素材18セット

Apple マグカップのアイコンと追加機能 HD ストレージボックス – アドオンパックセイバースノ...

スライダー効果を実装するミニプログラム

この記事の例では、スライディングブロック効果を実現するための小さなプログラムの具体的なコードを参考ま...

ユーザーエクスペリエンスの要素またはWebデザインの要素

システムとユーザー環境の設計<br />Apple システムの成功は、そのシステム アー...

Linux でのデータベースのスケジュールバックアップの実装スクリプト

目次シナリオ: サーバーデータベースを毎日定期的にバックアップする必要がある1. まずバックアップス...

JavaScript の実行コンテキストとコールスタックの詳細な説明

目次1. 実行コンテキストとは何か2. 実行コンテキスト スタックとは何ですか? 3. 実行コンテキ...

Docker Swarm 外部検証ロードバランシングが機能しない場合の解決策

問題の説明Centos7 をローカルにインストールして 3 つの仮想マシンを作成し、Swarm クラ...

js を使用して QR コードを生成するサンプル コード

以前、プロジェクトでQRコードをスキャンして情報を表示する機能を開発する必要がありました。インターネ...

Linuxでのaliasコマンドの使い方の詳細な説明

1. 別名の使用alias コマンドは、コマンドのエイリアスを設定するために使用されます。このコマン...

Pythonで書かれたWebアプリケーションをDockerでデプロイする実践

目次1. Dockerをインストールする2. コードを書く3. Dockerfileを書く4. 画像...

Vueで複数の添付ファイルをアップロードする実装例

目次序文コアコードコードのファイル表示部分序文この記事では主に、Vue プロジェクトでの添付ファイル...

TypeScript をインストール、使用、自動コンパイルする方法に関するチュートリアル

1. TypeScriptの紹介前回の記事ではTypeScriptのインストール、使い方、自動コンパ...

VMware を使用して PXE バッチ インストール サーバーをテストする詳細なプロセス

目次1. 準備1. 環境を整える2. インストール方法3. ネットワークカードの構成2. インストー...

Linux での MySQL 8.0.11 のインストールに関するチュートリアル

1. 公式サイトにアクセスしてインストールパッケージをダウンロードしますダウンロードリンク: クリッ...

この記事では、6つの負荷分散技術の実装方法をまとめます(要約)

ロード バランシングは、サーバー クラスタの展開でよく使用されるデバイスです。マシンのパフォーマンス...