序文ストアドプロシージャ:プログラム可能な関数のセットは、特定の機能を実行するための SQL ステートメントのセットです。これらはコンパイルされ、作成され、データベースに保存されます。ユーザーは、ストアド プロシージャの名前を指定し、パラメーター (必要な場合) を指定して、これらを呼び出して実行できます。 利点 (ストアド プロシージャを使用する理由): 1. 反復性の高い操作をストアドプロシージャにカプセル化して、これらのSQLの呼び出しを簡素化する 2. バッチ処理: SQL + ループ、トラフィックの削減、「バッチの実行」とも呼ばれます 3. データセキュリティを確保するための統一インターフェース Oracle データベースと比較すると、MySQL ストアド プロシージャは比較的弱く、あまり使用されていません。 1. ストアドプロシージャの作成と呼び出し
1. ストアドプロシージャを作成する作成する [定義者 = { ユーザー | 現在のユーザー }] プロシージャ sp_name ([proc_parameter[,...]]) [特性...] ルーチン本体 プロシージャパラメータ: [ IN | OUT | INOUT ] パラメータ名 タイプ 特徴: コメント '文字列' | 言語 SQL | [非]決定論的 | { SQL を含む | SQL を含まない | SQL データを読み取る | SQL データを変更する } | SQL セキュリティ { 定義者 | 呼び出し者 } ルーチン本体: 有効なSQLルーチンステートメント [begin_label:] 開始 [ステートメントリスト] … 終了 [end_label] #データベースを作成し、例の操作のためにデータテーブルをバックアップします mysql> データベース db1 を作成します。 mysql> db1 を使用します。 mysql> select * from TENNIS.PLAYERS として PLAYERS テーブルを作成します。 mysql> select * from TENNIS.MATCHES としてテーブル MATCHES を作成します。 例: 特定のプレイヤーがプレイしたすべてのゲームを削除するストアドプロシージャを作成する mysql> delimiter $$ #ステートメントの終了記号をセミコロン;から2つの$$に一時的に変更します(カスタマイズ可能) mysql> CREATE PROCEDURE delete_matches(IN p_playerno INTEGER) -> 開始 -> 一致から削除 -> ここで、playerno = p_playerno; -> 終了$$ クエリは正常、影響を受けた行は 0 行 (0.01 秒) mysql> delimiter ; #文の終了記号をセミコロンに戻す 分析: デフォルトでは、ストアド プロシージャはデフォルトのデータベースに関連付けられます。特定のデータベースにストアド プロシージャを作成するように指定する場合は、プロシージャ名の前にデータベース名を付けます。 プロシージャを定義するときは、DELIMITER $$ コマンドを使用して、ステートメント終了記号をセミコロン 1 個から 2 つの $$ に一時的に変更し、プロシージャ本体で使用されるセミコロンがクライアント (MySQL など) によって解釈されることなくサーバーに直接渡されるようにします。 2. ストアド プロシージャを呼び出します: call sp_name[(pass param)];mysql> MATCHES から * を選択します。 +---------+---------+---------+-----+------+ | 試合番号 | チーム番号 | 選手番号 | 勝利 | 敗北 | +---------+---------+---------+-----+------+ | 1 | 1 | 6 | 3 | 1 | | 7 | 1 | 57 | 3 | 0 | | 8 | 1 | 8 | 0 | 3 | | 9 | 2 | 27 | 3 | 2 | | 11 | 2 | 112 | 2 | 3 | +---------+---------+---------+-----+------+ セット内の行数は 5 です (0.00 秒) mysql> delete_matches(57) を呼び出します。 クエリは正常、1 行が影響を受けました (0.03 秒) mysql> MATCHES から * を選択します。 +---------+---------+---------+-----+------+ | 試合番号 | チーム番号 | 選手番号 | 勝利 | 敗北 | +---------+---------+---------+-----+------+ | 1 | 1 | 6 | 3 | 1 | | 8 | 1 | 8 | 0 | 3 | | 9 | 2 | 27 | 3 | 2 | | 11 | 2 | 112 | 2 | 3 | +---------+---------+---------+-----+------+ セット内の 4 行 (0.00 秒) 分析: パラメータとして渡す必要がある変数 p_playerno は、ストアド プロシージャ内で設定されます。ストアド プロシージャが呼び出されると、パラメータ渡しによって p_playerno に 57 が割り当てられ、ストアド プロシージャ内で SQL 操作が実行されます。 3. ストアドプロシージャ本体
始める 始める 始める 声明; 終わり 終わり 終わり 注: ネストされた各ブロックとその中の各ステートメントは、セミコロンで終了する必要があります。プロシージャ本体の終了を示す begin-end ブロック (複合ステートメントとも呼ばれます) には、セミコロンは必要ありません。 4. ステートメントブロックにラベルを付ける[begin_label:] 開始 [ステートメントリスト] 終了 [end_label] 例えば: ラベル1: 開始 ラベル2: 開始 ラベル3: 開始 声明; ENDラベル3; ENDラベル2; 終了ラベル1 タグには 2 つの機能があります。
2. ストアドプロシージャのパラメータストアド プロシージャには、ストアド プロシージャの定義で使用される 0 個以上のパラメーターを設定できます。 3 つのパラメータ タイプ:
1. 入力パラメータmysql> 区切り文字 $$ mysql> プロシージャ in_param(in p_in int) を作成します -> 開始 -> p_in を選択します。 ->p_in=2 を設定します。 -> P_in を選択します。 -> 終了$$ mysql> 区切り文字; mysql> @p_in=1 を設定します。 mysql> in_param(@p_in); を呼び出します。 +------+ | p_in | +------+ | 1 | +------+ +------+ | ピン | +------+ | 2 | +------+ mysql> @p_in を選択します。 +-------+ | @p_in | +-------+ | 1 | +-------+ #上記から、ストアド プロシージャで p_in が変更されていることがわかりますが、前者はローカル変数であり、後者はグローバル変数であるため、@p_id の値には影響しません。 2. 出力パラメータmysql> 区切り文字 // mysql> プロシージャ out_param(out p_out int) を作成します -> 開始 -> p_out を選択します。 ->p_out=2 を設定します。 -> p_out を選択します。 -> 終了 -> // mysql> 区切り文字; mysql> @p_out=1 を設定します。 mysql> out_param(@p_out); を呼び出します。 +-------+ | p_out | +-------+ | NULL | +-------+ #outは呼び出し元にパラメータを出力するもので、入力パラメータを受け取らないため、ストアドプロシージャのp_outはnullになります +-------+ | p_out | +-------+ | 2 | +-------+ mysql> @p_out を選択します。 +--------+ | @p_out | +--------+ | 2 | +--------+ #out_paramストアドプロシージャを呼び出し、パラメータを出力し、p_out変数の値を変更します 3. inout入力パラメータmysql> 区切り文字 $$ mysql> プロシージャ inout_param(inout p_inout int) を作成します -> 開始 -> p_inout を選択します。 ->p_inoutを2に設定します。 -> p_inout を選択します。 -> 終了 -> $$ mysql> 区切り文字; mysql> @p_inout を 1 に設定します。 mysql> inout_param(@p_inout); を呼び出します。 +---------+ | p_inout | +---------+ | 1 | +---------+ +---------+ | p_inout | +---------+ | 2 | +---------+ mysql> @p_inout を選択します。 +----------+ | @p_inout | +----------+ | 2 | +----------+ #inout_paramストアドプロシージャを呼び出し、入力パラメータを受け入れ、またパラメータを出力し、変数を変更します 知らせ: 1 プロシージャにパラメータがない場合は、プロシージャ名の後に括弧も記述する必要があります。 例: CREATE PROCEDURE sp_name ([proc_parameter[,...]]) … 2. パラメータ名が列名と同じでないことを確認します。同じでないと、パラメータ名はプロシージャ本体で列名として扱われます。 壁のひび割れの提案:
要約するこの記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: 超大型フォントを使用した 40 の Web ページ デザイン
1. Apache 2.4.41 のインストールと設定最初のステップは、以下に示すように、https...
この記事では、音楽プレーヤーを実装するためのVue.jsの具体的なコードを参考までに共有します。具体...
1. Pythonは起動時に自動的に実行されますPython の自己起動スクリプトがauto.pyで...
従来の解決策FileReader を使用して UTF-8 形式のファイルを読み取り、ファイルの内容に...
<br />前回は、Web テーブルにセルの線を設定する方法を学びました。今日は、Web...
g++ を使用して初めて cpp ファイルをコンパイルしたとき、未定義の参照エラーが報告されました。...
目次1. 現象2. 解決策3. 要約: 1. 現象1. 要件: 特定の表示ページをキャプチャしてアル...
この記事の例では、Baidu検索ボックスを実装するためのJSの具体的なコードを参考までに共有していま...
実行環境、Idea2020バージョン、Tomcat10、実行時にTomcat CatalinaLog...
目次最初のステップステップ2ステップ3ステップ4 Alipay 決済インターフェースへの接続に関する...
この記事では、CSS で記事の区切り線を実装するさまざまな方法をまとめています。区切り線はページを美...
以下のように表示されます。 1. ssh -v -p [ポート番号] [ユーザー名]@[IPアドレス...
目次1. 準備Redisイメージを取得する2. Redis Sentinel マスタースレーブモード...
MySQL5.6 SSLファイルの作成方法公式ドキュメント: https://dev.mysql.c...
1. 背景1.1 問題点最近の製品テスト レポートでは、PKI ベースの認証方法の使用が推奨されて...