序文ストアドプロシージャ:プログラム可能な関数のセットは、特定の機能を実行するための 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 ページ デザイン
目次序文:成し遂げる:要約:まず効果を見てみましょう: 序文:このアイデアは、Bilibili のア...
1. HTMLとは何かHTML (ハイパーテキスト マークアップ言語): ハイパーテキスト マーク...
以下のように表示されます。 XML/HTML コードコンテンツをクリップボードにコピーbody、di...
目次Vue2 レスポンシブ原則のレビューVue3 レスポンシブ原則の分析ネストされたオブジェクトの応...
XPath は、XML ドキュメントの一部を選択するための言語です。 XPath は、XSLT、XQ...
目次データ量匿名マウントと名前付きマウントデータボリュームの場所データ量匿名マウントと名前付きマウン...
まず、フォームを送信するいくつかの方法を見てみましょう。 1. <!--一般的な送信ボタン--...
削除する方法はいくつかあります:リンクを直接追加するonfocus="this.blur(...
設定は非常にシンプルですが、毎回確認しないといけないので、記録だけ残しておきます。 1. インストー...
目次1. 共同インデックスの説明2. ac はインデックスを使用できますか? 3. 考える4. 最左...
1.17.9 本当はもっと美味しいNginx のダウンロード アドレス: https://nginx...
目次序文1. SCPの使用法2. sftpを使用する3. scp と sftp の違いは何ですか?ど...
序文運用・保守を行う人がスキルを持っていなければ、サーバーを操作するのに恥ずかしさを感じてしまうと言...
一般的な開発ニーズとして、要素の一部を必要になるまで折りたたんでおきたいことが挙げられます。 Boo...
スタイルシートの最も重要な機能の 1 つは、ページ、画面、電子シンセサイザーなどの複数のメディアに適...