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 以上の配列メソッドを手動で実装する

推薦する

77.9K の GitHub リポジトリを持つ Axios プロジェクト: 学ぶ価値のあることは何でしょうか?

目次序文1. Axiosの紹介2. HTTPインターセプターの設計と実装2.1 インターセプターの紹...

Angular CLI リリース パスの構成項目の簡単な分析

序文プロジェクトのリリースでは、常に特定の状況に応じたパッケージ化が必要です。Angular CLI...

収集する価値のあるCSS命名規則(ルール) よく使われるCSS命名規則

CSS命名規則(ルール) よく使われるCSS命名規則ヘッダー: ヘッダーコンテンツ: コンテンツ/コ...

ネイティブJSで禁止すべきメソッドの記述

目次ブロックレベル関数オブジェクトのプロトタイプを直接変更すると呼び出された人発信者評価ブロックレベ...

この記事ではJavaScriptのガベージコレクションの仕組みを説明します

目次1. 概要2. メモリ管理3. ガベージコレクション4. GCアルゴリズムの紹介5. 参照カウン...

Ubuntu のインストール グラフィック ドライバーと Cuda チュートリアル

目次1. 元のドライバーをアンインストールする2. 新しいグラフィックカードドライバーをダウンロード...

InnoDB がトランザクション分離レベルを巧みに実装する方法

序文前回の記事「MySQL ロック メカニズムの詳細説明」では、InnoDB のロック メカニズムに...

WeChat アプレット uniapp は左スワイプによる削除効果を実現します (完全なコード)

WeChatアプレットuniappは左スワイプで削除効果を実現成果を達成する1. スワイプしてリス...

Windows CVE-2019-0708 リモート デスクトップ コード実行脆弱性の再現問題

1. 脆弱性の説明マイクロソフトは2019年5月15日、CVE番号CVE-2019-0708のWin...

CSS 向け SASS スタイル プログラミング ガイド

SASS を使用する開発者が増えるにつれて、SASS コードの数に注意する必要があります。 SASS...

MySQL 演算子の具体的な使用法 (and、or、in、not)

目次1. はじめに2. 本文2.1 および演算子2.2 または演算子2.3 オペレーター2.4 no...

MySQL で数千万のテストデータを含むテストデータベースを作成する方法

場合によっては、MySQL が公式に提供しているテスト ライブラリに基づいてテスト データを作成し、...

CSSスタイルのカスケーディングルールの詳細な説明

CSS スタイル ルール構文スタイルは、CSS の基本単位です。各スタイル ルールは、セレクターと宣...

MySQLにおけるMTRの概念

MTR は Mini-Transaction の略です。名前が示すように、これは「最小のトランザクシ...