この記事では、例を使用して、MySQL ストアド プロシージャの原理と使用方法を説明します。ご参考までに、詳細は以下の通りです。 この記事の内容:- ストアドプロシージャとは
- ストアドプロシージャの作成
- ストアドプロシージャの使用
- ストアドプロシージャを表示する
- ストアドプロシージャを変更する
- ストアドプロシージャの削除
リリース日: 2018-04-17
ストアド プロシージャとは何ですか?- ストアドプロシージャは一連のSQL文を保存する
- 以下は、多くの MySQL 書籍に記載されているストアド プロシージャの典型的な要件シナリオです。
 - ストアド プロシージャは一連の SQL ステートメントを格納します。これにより操作が簡素化され、一連の操作を繰り返し実行する必要がなくなります。必要なときにストアド プロシージャを呼び出すだけです。
- 一般的に言えば、ストアド プロシージャの機能は関数の機能に似ていると考えられます (関数についてはすでに学習しているはずです)。ただし、ストアド プロシージャには戻り値がないことに注意すれば、関数を使用できるシナリオに基づいてストアド プロシージャを理解できます。
補充:- ストアド プロシージャとトリガーの違い: トリガーは、イベントをトリガーするときに一連のステートメントを実行します。一方、ストアド プロシージャは、呼び出されると、状況に応じて「別の一連のステートメント」の実行も検討します。
- ストアド プロシージャと関数の違い: 関数には戻り値がありますが、ストアド プロシージャには戻り値がありません (そのため、SELECT ステートメントでは使用できません)。
ストアド プロシージャの作成:- プロシージャを作成します。ストアド プロシージャ名 ([パラメータ リスト]) で、SQL ステートメントを開始します。終了です。
- パラメータリストの形式は次のとおりです: [type 修飾変数名 データ型]
- パラメータ リストには独自の型制限があります。この型制限はデータ型とは異なります。パラメータのスコープが制限されます。
- in: このパラメータはストアド プロシージャに渡されるものに限定されます。値渡しなので、変数または定数データにすることができます [ in によって変更されたパラメータは、通常、何らかの条件としてストアド プロシージャに渡され、ストアド プロシージャによって変更されることはありません]
- out: このパラメータは、ストアド プロシージャによって渡される値に制限されます。値が返されるため、このパラメータは変数である必要があります。 [out によって変更された変数には、ストアド プロシージャ内で値が割り当てられ、変更された値がプロシージャの外部で取得できるようになります。]
- inout: inout は上記 2 つを組み合わせたものです。ストアド プロシージャ内で使用でき、外部で変更して使用することもできます。値を返すため、このパラメーターは変数である必要があります。
- 理論的には、複数の選択をすばやく使用したい場合や、データから複数の値を抽出して変数に割り当てたい場合など、簡潔なコードが必要なあらゆる状況でストアド プロシージャを使用できます。そのため、以下では使用方法のみを示し、適用シナリオについては説明しません。
- 1: パラメータは渡されず、特定のコードのみが実行されます
- 2. パラメータを渡し、それをコード実行の条件として使用する
- 3. パラメータを渡し、それを条件として使用してコードを実行し、変数を使用して結果を取得します。
- [次の呼び出しは呼び出しプロセスです]
-- 最も簡単な例は、プロシージャ myselect() を作成します。
始める
@@バージョンを選択します。
終わり;
プロシージャ getInfo(in mname varchar(15)) を作成します。
始める
mnameを選択します。
終わり;
myselect() を呼び出す
getInfo("lilie"); を呼び出します。
-- パラメータを渡すことで指定されたコンテンツを取得できるプロシージャ getInfo2(in mname varchar(15)) を作成します。
始める
name = mname の学生から * を選択します。
終わり;
getInfo2("lilei") を呼び出します。
-- 結果を変数に代入し、外部作成プロシージャ getInfo3(in mname varchar(15),out oname varchar(15)) に渡します。
始める
name =mname の student から oname に名前を選択します。
終わり;
getInfo3("lilei",@mname); を呼び出します。
@mname を選択します。 補充:- トリガーと同様に、コマンド ライン モードでストアド プロシージャを作成する場合は、コマンド ターミネータを変更する必要があります。
- 特別なオプションもいくつかあり、それらは([パラメータリスト])の後、beginの前に記述されます。
- コメント: このストアドプロシージャの説明です
プロシージャ myselect2() を作成する
コメント「私の一連のSQL文」
始める
学生から*を選択します。
クラスから*を選択します。
終わり;
作成手順 myselect2 を表示します。 - 他にもSQLセキュリティなどのオプションがいくつかあります。興味があれば、Baiduで検索してみてください。ここでは説明しません。この知識ポイントについてだけ述べます。
ストアド プロシージャの使用:- ストアド プロシージャを呼び出します: ストアド プロシージャ名 () を呼び出します。
- パラメータを使用してストアド プロシージャを呼び出す: call stored procedure name (parameters);
- in 型の場合、パラメータは値または変数になります。
- out\inout型の場合、パラメータは変数である必要があります
- すべての MySQL 変数は @ で始まる必要があります。
- 例: call myselect("lilei",@variable name); 例: call myselect(@variable name,@variable name)
以下で呼び出されるストアド プロシージャは、上記で作成されたストアド プロシージャで定義されたストアド プロシージャです。
myselect() を呼び出す
getInfo("lilie"); を呼び出します。
@mname="lilei" を設定します。
getInfo(@mname); を呼び出します。
getInfo3("lilei",@mname); を呼び出します。 変数の使用:- out と inout は、ストアド プロシージャによって変更される変数を変更できますが、この変更はストアド プロシージャの呼び出しが終了するまで成功しません [プロシージャ内にそれを変更するコマンドがある場合、このコマンドの後に変数をチェックして、グローバル変数は変更されておらず、ローカル変数のみが変更されていることがわかります]。
- すべての MySQL 変数は @ で始まる必要があります。
- ストアド プロシージャでは、select variable name を使用してローカル変数を使用できます。select @variable name を使用してグローバル変数を使用できます。
- 特定の変数の定義と使用については、私の別のブログ投稿で説明します。ハイパーリンク: MySQL 変数
ストアド プロシージャを表示します。- ストアド プロシージャの作成ステートメントを表示します: show create procedure ストアド プロシージャ名;
- ストアド プロシージャのステータスを表示します: show procedure status; [表示される内容には、作成時間、コメント、定義されたユーザー、セキュリティ タイプなどが含まれます]
ストアド プロシージャを変更します。- ストアド プロシージャを変更する場合、変更できるのはそれらのオプションのみです (具体的なオプションについてはここでは説明しません。知りたい場合は Baidu で検索してください)。受信パラメーターや送信パラメーター、または SQL ステートメントを変更することはできません。
- プロシージャのストアド プロシージャ名オプションを変更します。
ストアド プロシージャを削除します。- 構文: drop procedure ストアド プロシージャ名;
- 例:
MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL ストアド プロシージャ スキル」、「MySQL 共通関数の概要」、「MySQL ログ操作スキル」、「MySQL トランザクション操作スキルの概要」、および「MySQL データベース ロック関連スキルの概要」 この記事が皆様のMySQLデータベース設計に役立つことを願っています。 以下もご興味があるかもしれません:- MySQL ストアド プロシージャでの変数の定義と割り当て
- MySQLストアドプロシージャの詳細な説明
- MySQL ストアド プロシージャ カーソル ループの使用の概要
- MySQL ストアド プロシージャの例 (トランザクション、出力パラメータ、ネストされた呼び出しを含む)
- MySql ストアド プロシージャと関数の詳細な説明
- mysql クエリ データベース ストアド プロシージャと関数ステートメント
- MySQL のストアド プロシージャの分析例とストアド プロシージャの呼び出し方法
- MySQL ストアド プロシージャの動的 SQL で戻り値を取得する方法の詳細な説明
- MySQL ストアド プロシージャで動的 SQL ステートメントを実行する方法
- MySQL ストアド プロシージャでカーソル ループを終了して継続する例
- MySQL ストアドプロシージャと関数の違い
|