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 環境)

推薦する

TypeScript 列挙の基本と例

目次序文TypeScript の列挙型とは何ですか? TypeScriptで列挙型を使用する際に注意...

HTML の基本 - ハイパーリンク スタイルを設定する簡単な例

*** ハイパーリンクのスタイル設定の例a:link クリックされる前のハイパーリンクの状態a:vi...

要素 UI に基づいてクエリ コンポーネントを段階的にカプセル化する方法

目次関数基本的なクエリ関数クエリ条件の初期化ページのレンダリングクエリと表示の最適化をさらに強化プル...

なぜCSSをヘッドタグに配置する必要があるのか

考えてみてください。なぜcss 、 javascriptのようにbodyタグの末尾ではなく、 hea...

JavaScript でフロントエンドのカウントダウン効果を実装する

この記事では、フロントエンドのカウントダウン効果を実現するためのJavaScriptの具体的なコード...

Navicat の MySQL へのリモート接続の実装手順の分析

序文皆さんはリモート サーバーで開発を行っており、MySQL の使用率はかなり高いはずです。コマンド...

Ubuntu 20.04は静的IPアドレスを設定します(異なるバージョンを含む)

Ubuntu 20.04はnetplanを通じてネットワークを管理するため、以前のバージョンとは少...

MySQL 挿入時間の 8 時間の違いの問題の解決方法

MySQL挿入時の8時間の時差の問題を解決する通常、jdbc の URL にはいくつかのパラメータを...

垂直グリッドと漸進的な行間隔の例

新しい質問急いで来て、急いで行ってください。 「垂直グリッドとプログレッシブ行間隔 (パート 1)」...

MySql でデータの重複挿入を回避する 3 つの方法

序文MySql で主キーの競合または一意キーの競合が発生した場合、挿入方法に応じてエラーを回避するた...

MySQL で自動インクリメントシーケンスを実装するためのサンプルコード

1. シーケンステーブルを作成する テーブル `sequence` を作成します ( `name` ...

Vue で 3D タグ クラウドを実装するための詳細なコード

プレビュー: コード:ページセクション: <テンプレート> <div class=...

Vueフォームで画像を処理する方法

質問: Vue にブログ投稿をアップロードするためのフォームがあり、タイトル、本文、説明、スニペット...

mysql 8.0.18 mgr のインストールと切り替え機能

1. システムインストールパッケージ yum -y インストール make gcc-c++ cmak...

Vue の一般的な問題と解決策の概要 (推奨)

Vue に限定されず、他の種類の SPA プロジェクトにも当てはまる問題がいくつかあります。 1....