MySQL ストアド プロシージャ (in、out、inout) の詳細な説明

MySQL ストアド プロシージャ (in、out、inout) の詳細な説明

1. はじめに

バージョン 5.0 以降でサポートされています。特定の機能を実行するための SQL ステートメントのセット (カプセル化) です。従来の SQL よりも高速で効率的です。

ストアドプロシージャの利点

1. 一度実行した後、生成されたバイナリコードはバッファに保存され(次回の実行のために)、実行効率が向上します。

2. 柔軟性の高いSQL文と制御文の集合

3. サーバー側に保存し、クライアントが呼び出したときのネットワーク負荷を軽減する

4. クライアントの呼び出しに影響を与えることなく、いつでも繰り返し呼び出し、変更することができます。

5. すべてのデータベース操作を完了でき、データベースの情報アクセス権を制御できます。

ストアド プロシージャを使用する理由は何ですか?

1. ネットワーク負荷を軽減する。2. セキュリティを強化する

2. ストアドプロシージャを作成する

2.1 基本プロセスの作成

プロシージャ作成ステートメントを使用してストアドプロシージャを作成します

ストアドプロシージャの主要部分はプロシージャ本体と呼ばれ、beginで始まりend$$で終わります。

#宣言文のターミネータはカスタマイズ可能です:
区切り文字 $$
#ストアド プロシージャを宣言する create procedure ストアド プロシージャ名 (パラメータ名 パラメータ タイプ内)
始める
# 変数を定義し、変数名を宣言し、変数の型を指定します。# 変数の値を割り当て、変数名 = 値を設定します。SQL ステートメント 1;
 SQL ステートメント 2;
 ...
終わり$$
#元のステートメント終了区切り文字(スペース付き)に戻す

例:

mysql> 区切り文字 $$
mysql> プロシージャ text() を作成する
 -> 開始
 -> stu.a_player から * を選択します。
 -> 終了 $$
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
mysql> 区切り文字;

ストアドプロシージャの呼び出し

ストアド プロシージャ名 (実際のパラメーター) を呼び出します。
mysql> テキストを呼び出します。
+----+----------+-------+
| ID | 名前 | スコア |
+----+----------+-------+
| 1 | 張さん | 88 |
| 2 | リシ | 89 |
| 3 | 王武 | 67 |
| 4 | 昭六 | 90 |
| 5 | シュリ | 80 |
| 6 | ケケ | 75 |
+----+----------+-------+
セット内の 6 行 (0.00 秒)

ストアドプロシージャの削除

mysql> プロシージャテキストを削除します。

2.2 ストアドプロシージャのパラメータ

MySQL ストアド プロシージャのパラメータは、ストアド プロシージャの定義で使用されます。パラメータには、IN、OUT、INOUT の 3 種類があります。形式は次のとおりです。

CREATEPROCEDURE ストアド プロシージャ名 ([[IN | OUT | INOUT ] パラメータ名 データ型 ...])

IN 入力パラメータ: 呼び出し元がプロシージャに値を渡すことを示します (渡される値はリテラルまたは変数です)

OUT 出力パラメータ: プロシージャが呼び出し元に値を渡すことを示します (複数の値を返すことができます) (出力値は変数のみになります)

INOUT 入力および出力パラメータ: 呼び出し元がプロシージャに値を渡し、プロシージャが呼び出し元に値を渡すことを示します (値は変数のみになります)

パラメータを渡す例:

mysql> プロシージャ test1(in_id int(2)) を作成します。
 -> 開始
 -> id=in_id の場合、stu.a_player から * を選択します。
 -> 終了 $$
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
mysql> 区切り文字;

# in_id変数に4を渡し、トランザクションを実行します。mysql> call test1(4); 
+----+---------+-------+
| ID | 名前 | スコア |
+----+---------+-------+
| 4 | 昭六 | 90 |
+----+---------+-------+
セット内の 1 行 (0.00 秒)

# in_id変数に6を渡し、トランザクションを実行します。mysql> call test1(6);
+----+------+-------+
| ID | 名前 | スコア |
+----+------+-------+
| 6 | ケケ | 75 |
+----+------+-------+
セット内の 1 行 (0.00 秒)

mysql> 区切り文字 $$
mysql> プロシージャ test2(out aa int) を作成します 
 -> 開始
 -> aa を選択します。
 -> aa=2 を設定します。
 -> aa を選択します。
 -> 終了 $$
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
mysql> 区切り文字;
# @aa 変数を test2 に渡します transaction mysql> call test2(@aa);
+------+
| あぁ |
+------+
| NULL |
+------+
#outは呼び出し元にパラメータを出力し、入力パラメータを受け取らないので、aaはnullです。
セット内の 1 行 (0.00 秒)
+------+
| あぁ |
+------+
| 2 |
+------+
トランザクションはaa変数を2(グローバル)に設定し、セット内の1行を出力します(0.00秒)
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
mysql> @aa を選択します。
+------+
| @aa |
+------+
| 2 |
+------+
セット内の 1 行 (0.00 秒)
#トランザクション外のクエリ変数が変更されました

IN、OUT、INOUTの比較

mysql> 区切り文字 //
mysql> プロシージャ test3(in num1 int, out num2 int, inout num3 int) を作成します。
 -> 開始
 -> num1、num2、num3 を選択します。
 -> num1=10、num2=20、num3=30 を設定します。
 -> num1、num2、num3 を選択します。
 -> 終了 //
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
mysql> 区切り文字;
mysql> test3(@num1,@num2,@num3) を呼び出します。
+------+------+------+
| 数値1 | 数値2 | 数値3 |
+------+------+------+
| 1 | NULL | 3 |
+------+------+------+
セット内の 1 行 (0.00 秒)
+------+------+------+
| 数値1 | 数値2 | 数値3 |
+------+------+------+
| 10 | 20 | 30 |
+------+------+------+
セット内の 1 行 (0.00 秒)
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

in および inout パラメーターはグローバル変数の値をストアド プロシージャに渡しますが、out パラメーターはグローバル変数の値をストアド プロシージャに渡しません。ストアドプロシージャを使用すると、パラメータ値in、out、inoutが変更されます。

mysql> @num1、@num2、@num3 を選択します。
+-------+-------+-------+
| @num1 | @num2 | @num3 |
+-------+-------+-------+
| 1 | 20 | 30 |
+-------+-------+-------+
セット内の 1 行 (0.00 秒)

ストアド プロシージャを呼び出した後、in パラメーターはグローバル変数の値を変更しないことがわかりますが、out および inout パラメーターはストアド プロシージャを呼び出した後にグローバル変数の値を変更し、ストアド プロシージャによって参照される値がグローバル変数に割り当てられます。

in パラメータの割り当てタイプは変数または固定値にすることができますが、out および inout パラメータの割り当てタイプは変数である必要があります。

要約する

これで、MySQL ストアド プロシージャ (in、out、inout) に関するこの記事は終了です。MySQL ストアド プロシージャ (in、out、inout) の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL ストアド プロシージャの作成、呼び出し、管理の詳細な説明
  • MySQL ストアド プロシージャのクエリ コマンドの概要
  • MySQL ストアド プロシージャの in、out、inout パラメータの例と概要
  • MySQLストアドプロシージャを変更する詳細な手順
  • カーソル ループを使用して、MySQL ストアド プロシージャで一時テーブルを読み取る
  • MySQL ストアド プロシージャ関連の権限変更の問題
  • MySQL ストアド プロシージャで月ごとにテーブルを作成する方法
  • MySql ビュー、トリガー、ストアド プロシージャに関する簡単な説明
  • MySQL ストアド プロシージャで if ステートメントを使用する詳細な例
  • MySQL ストアドプロシージャの長所と短所の分析

<<:  Vueのプラグインの仕組みとインストールの詳細を深く理解する

>>:  JavaScript で 24 以上の配列メソッドを手動で実装する

推薦する

要素の属性を削除する JS removeAttribute() メソッド

JavaScript では、要素の removeAttribute() メソッドを使用して、指定され...

CSS3 レーダースキャンマップのサンプルコード

CSS3 を使用して、クールなレーダースキャン画像を実現します。 コード上で直接: // インデック...

Dockerコンテナのタイムゾーン調整操作

Docker コンテナのタイムゾーンがホストマシンと一致しているかどうかを確認するにはどうすればよい...

Ubuntu16.04にclionをインストールするプロセス全体と手順の詳細な説明

CLion のプロセス全体を最初から説明します。CLion は、JetBrains がリリースした新...

DockerでGit環境を構築して構成するプロセス

DockerでGit環境を構成する仕事上、Docker 環境で GitLab リポジトリを操作する必...

JavaScript の基礎: 即時実行関数

目次関数フォーマットを即時実行関数を即座に実行する他の方法 – 式即時実行される関数はパラメータを取...

JavaScriptはオブジェクトの不要なプロパティを削除します

目次例方法1: 削除方法2: 分解補充する要約するThinking シリーズは、10 分で実用的なプ...

Springboot プロジェクトの Docker-compose イメージリリースプロセス分析

導入Docker-Compose プロジェクトは、Docker コンテナ クラスターの迅速なオーケス...

CSSを使用して中央に固定された2つの列と適応型列を実現する方法

1. 絶対位置とマージンを使用するこの方法の原則は、左側と右側をドキュメントの流れから外れるように配...

vue3 タイムスタンプ変換 (フィルターを使用せずに)

vue2 では、タイムスタンプを変換するときに、通常はフィルターを使用します。vue3 以降では、...

Dockerのオンラインおよびオフラインインストールと一般的なコマンド操作

1. テスト環境名前バージョンセント7.6ドッカー18.09.06 2. オンラインインストールここ...

MySQL共通インデックスとユニークインデックスの選択に関する詳細な分析

各人が固有の携帯電話番号で登録し、ビジネス コードによって重複する携帯電話番号が 2 つ書き込まれな...

vue+elementui+vuex+sessionStorage を使用して履歴タグ メニューを実装するためのサンプル コード

一般的には、左側にメニューがあった後、ページの上部に履歴タブ メニューを追加する必要があります。他の...

Nginx の負荷分散方法の概要

負荷分散を理解するには、まずフォワード プロキシとリバース プロキシを理解する必要があります。注記:...

Ubuntu 16.04 64ビット版を3つのステップで32ビットプログラムと互換性を持たせる

ステップ1: システムのアーキテクチャを確認する dpkg --print-architecture...