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

推薦する

HTML の水平および垂直中央揃えの問題の概要

最近、センタリングの問題に数多く遭遇したので、後で簡単に見つけられるように、時間をかけてそれらを要約...

Node8 における AsyncHooks 非同期ライフサイクル

Async Hooks は Node8 の新機能です。NodeJs の非同期リソースのライフサイクル...

HTML 学習ノート - HTML 構文の詳細な説明 (必読)

1. HTML マークアップ言語とは何ですか? HTML は、Web ページの情報を表すマークアッ...

MySQL 8.0.11 インストール概要チュートリアル図

インストール環境: CAT /etc/os-release CentOS システムのバージョン情報を...

Linux システムで Java 環境変数を設定する方法

Java環境変数を設定するここで、環境変数は etc/profile に設定され、つまり、すべてのユ...

Amoeba を使用して MySQL データベースの読み取り/書き込み分離を実装する方法の詳細な説明

MySQL には読み取りと書き込みを分離するアーキテクチャが多数あります。Baidu のそれらのほと...

Docker nginx + https サブドメイン設定の詳細なチュートリアル

今日はたまたま友人のサーバーの移転を手伝うことになり、サーバーの基本的な設備の設定を行ったのですが、...

実用的なクイックスタートReactルーティング開発

インストールインストールするには、次のコマンドを入力します。 // ネプ npm で react-r...

Reactベースのコンポーネントのカプセル化の実装手順

目次序文antd はどのようにしてコンポーネントをカプセル化するのでしょうか?ディバイダーコンポーネ...

MySQL でのデータベース間クエリの例

序文MySQL では、クロスデータベース クエリは主に 2 つの状況に分けられます。1 つは同じサー...

Vue プロジェクト @change 複数のパラメータを使用して複数のイベントを渡す

まず、変更イベントは 1 つだけです。 changelevel() //値を選択選択を変更して行の値...

純粋なCSSを使用してスイッチ効果を実現する

まずアイデアはこの効果を実現するには、 <input type="checkbox&...

初心者のためのMySQL外部キーの設定方法

目次外部キーの役割mysql 外部キー設定方法要約する外部キーの役割データの一貫性、整合性を維持し、...

MySQL XA で分散トランザクションを実装する方法

目次序文XA プロトコルMySQL XA で分散トランザクションを実装する方法序文MySQL が単一...

Nginx はリクエスト接続を統合し、ウェブサイトのアクセス例を高速化します

序文世界最高の Web サーバーの 1 つである Nginx の利点は明らかです。 Nginx がリ...