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 種類があります。形式は次のとおりです。
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 をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Vueのプラグインの仕組みとインストールの詳細を深く理解する
>>: JavaScript で 24 以上の配列メソッドを手動で実装する
目次序文1. Axiosの紹介2. HTTPインターセプターの設計と実装2.1 インターセプターの紹...
序文プロジェクトのリリースでは、常に特定の状況に応じたパッケージ化が必要です。Angular CLI...
CSS命名規則(ルール) よく使われるCSS命名規則ヘッダー: ヘッダーコンテンツ: コンテンツ/コ...
目次ブロックレベル関数オブジェクトのプロトタイプを直接変更すると呼び出された人発信者評価ブロックレベ...
目次1. 概要2. メモリ管理3. ガベージコレクション4. GCアルゴリズムの紹介5. 参照カウン...
目次1. 元のドライバーをアンインストールする2. 新しいグラフィックカードドライバーをダウンロード...
序文前回の記事「MySQL ロック メカニズムの詳細説明」では、InnoDB のロック メカニズムに...
WeChatアプレットuniappは左スワイプで削除効果を実現成果を達成する1. スワイプしてリス...
<div class="box"> <画像 /> &l...
1. 脆弱性の説明マイクロソフトは2019年5月15日、CVE番号CVE-2019-0708のWin...
SASS を使用する開発者が増えるにつれて、SASS コードの数に注意する必要があります。 SASS...
目次1. はじめに2. 本文2.1 および演算子2.2 または演算子2.3 オペレーター2.4 no...
場合によっては、MySQL が公式に提供しているテスト ライブラリに基づいてテスト データを作成し、...
CSS スタイル ルール構文スタイルは、CSS の基本単位です。各スタイル ルールは、セレクターと宣...
MTR は Mini-Transaction の略です。名前が示すように、これは「最小のトランザクシ...