MySQL ストアド プロシージャにおけるループ ステートメント (WHILE、REPEAT、LOOP) の使用法の分析

MySQL ストアド プロシージャにおけるループ ステートメント (WHILE、REPEAT、LOOP) の使用法の分析

この記事では、例を使用して、MySQL ストアド プロシージャでのループ ステートメント (WHILE、REPEAT、および LOOP) の使用方法を説明します。ご参考までに、詳細は以下の通りです。

MySQL には、条件に基づいて SQL コード ブロックを繰り返し実行できるループ ステートメントが用意されています。ループ ステートメントには、WHILE、REPEAT、および LOOP の 3 つがあります。これらを 1 つずつ見ていきましょう。まず、WHILE ステートメントの構文を見てみましょう。

WHILE式DO
  声明
終了中

WHILE ループは、各反復の開始時に式をチェックします。 expressionevaluates が TRUE の場合、MySQL は、expressionevaluates が FALSE になるまで、WHILE と END WHILE の間のステートメントを実行します。 WHILE ループは、実行前に常にステートメントの式をチェックするため、事前テスト条件ループと呼ばれます。フローチャートを見てみましょう:

次に、ストアド プロシージャで WHILE ループ ステートメントを使用してみます。例を見てみましょう。

区切り文字 $$
 存在する場合はプロシージャを削除する test_mysql_while_loop$$
 プロシージャ test_mysql_while_loop() を作成します。
 始める
 x INT を宣言します。
 str VARCHAR(255)を宣言します。
 x = 1 に設定します。
 str = '' を設定します。
 x <= 5 の場合
 SET str = CONCAT(str,x,',');
 x = x + 1 を設定します。 
 終了しながら;
 文字列を選択します。
 終わり$$
区切り文字 ;

上記の test_mysql_while_loop ストアド プロシージャでは、x 変数の値が 5 より大きくなるまで str 文字列を繰り返し構築し、select ステートメントを使用して最終文字列を表示します。 x 変数の値が初期化されていない場合、そのデフォルト値は NULL になることに注意してください。 したがって、WHILE ループ ステートメント内の条件は常に TRUE となり、予測できない無期限ループが発生します。では、これ以上長々とせずに、test_mysql_while_loopstored ストアド プロシージャを呼び出してみましょう。

test_mysql_while_loop() を呼び出します。

上記のクエリステートメントを実行すると、次の結果が得られます。

mysql> test_mysql_while_loop() を呼び出します。
+------------+
| 文字列 |
+------------+
| 1,2,3,4,5, |
+------------+
セット内の1行
クエリは正常です。影響を受けた行は 0 行です

最後に、REPEAT ループ ステートメントの文法構造を見てみましょう。

繰り返す
 声明;
UNTIL式
繰り返し終了

上記の SQL は、最初に MySQL によって実行されます。その後、MySQL は式を評価します。式が FALSE の場合、MySQL は式が TRUE になるまでステートメントを繰り返し実行します。 REPEAT ループ ステートメントはステートメントの実行後に式をチェックするため、REPEAT ループ ステートメントはテスト後ループとも呼ばれます。フローチャートを見てみましょう:

完了したら、REPEAT ループ ステートメントを使用して、test_mysql_while_loop ストアド プロシージャを書き換えます。

区切り文字 $$
 存在する場合はプロシージャを削除してください mysql_test_repeat_loop$$
 プロシージャ mysql_test_repeat_loop() を作成します。
 始める
 x INT を宣言します。
 str VARCHAR(255)を宣言します。
 x = 1 に設定します。
    設定文字列 = '';
 繰り返す
 SET str = CONCAT(str,x,',');
 x = x + 1 を設定します。
    x > 5 になるまで
    繰り返し終了;
    文字列を選択します。
 終わり$$
区切り文字 ;

UNTIL 式にはセミコロン (;) がないことに注意してください。上記のクエリステートメントを実行すると、次の結果が得られます。

mysql> mysql_test_repeat_loop() を呼び出します。
+------------+
| 文字列 |
+------------+
| 1,2,3,4,5, |
+------------+
セット内の1行
クエリは正常です。影響を受けた行は 0 行です

最後に、LOOP ステートメントの使用例を見てみましょう。

プロシージャ test_mysql_loop() を作成します。
 始める
 x INT を宣言します。
    str VARCHAR(255)を宣言します。
 x = 1 に設定します。
    設定文字列 = '';
 loop_label: ループ
 x > 10の場合 
 loop_labelを終了します。
 終了の場合;
 x = x + 1 を設定します。
 (x mod 2) ならば
   loop_label を反復します。
 それ以外
  SET str = CONCAT(str,x,',');
 終了の場合;
  ループを終了;
  文字列を選択します。
終わり;

上記SQLの具体的な機能は以下のとおりです。

  • 上記のストアド プロシージャは、2、4、6 などの偶数文字の文字列のみを構築します。
  • LOOP ステートメントの前にループ ラベル loop_label を配置します。
  • x の値が 10 より大きい場合、LEAVE ステートメントによりループは終了します。
  • x の値が奇数の場合、ITERATE ステートメントはそれ以下のすべてを無視し、新しい反復を開始します。
  • x の値が偶数の場合、ELSE ステートメント内のブロックは偶数で文字列を構築します。

上記のクエリステートメントを実行すると、次の結果が得られます。

mysql> test_mysql_loop() を呼び出します。
+-------------+
| 文字列 |
+-------------+
| 2,4,6,8,10, |
+-------------+
セット内の1行
クエリは正常です。影響を受けた行は 0 行です

ここで、制御ループの 2 つのキーワードを見てみましょう。

  • LEAVE ステートメントは、条件がチェックされるのを待たずにすぐにループを終了するために使用されます。 LEAVE ステートメントの動作原理は、PHP、C/C++、Java などの他の言語の break ステートメントと似ています。
  • ITERATE ステートメントを使用すると、残りのコード全体をスキップして新しい反復を開始できます。 ITERATE ステートメントは、PHP、C/C++、Java などの continue ステートメントに似ています。

さて、この記録についてはこれですべてです。

MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL ストアド プロシージャ スキル」、「MySQL 共通関数の概要」、「MySQL ログ操作スキル」、「MySQL トランザクション操作スキルの概要」、および「MySQL データベース ロック関連スキルの概要」

この記事が皆様のMySQLデータベース設計に役立つことを願っています。

以下もご興味があるかもしれません:
  • MySQL の選択、挿入、更新バッチ操作ステートメントのコード例
  • SQL 文を実行するときの Python MySQLdb パラメータ渡し方法
  • テーブルを作成するための MySQL SQL ステートメントの詳細な概要
  • MySQL ファジークエリステートメントコレクション
  • MySQL データベースでよく使用される SQL ステートメントの詳細と概要
  • MySQL データベースの基本的な SQL ステートメントの概要
  • MySQLステートメントの記述と実行順序を理解するだけです

<<:  Linux 環境変数の設定方法のまとめ (.bash_profile と .bashrc の違い)

>>:  VUEはG2チャートを使用した実装を導入します

推薦する

Vue でよく使われる命令 v-if と v-show の違いを簡単に分析します。

目次序文1.v-ショー2.v-if 3. v-showとv-ifの違い1. 原則の違い2. アプリケ...

Vue サーバーに js 構成ファイルをインポートする方法

目次背景成し遂げるvue-cli2.0での設定方法の補足要約する背景プロジェクトにはローカル構成ファ...

Ubuntu 20.04 オペレーティング システムの VMware インストール チュートリアル図

メモ: とにかく体験してみましょう。記録: NO.209この例の環境:仮想マシン: vmwareオペ...

1 つ以上のフィールドに基づいて重複データを検索する MySQL SQL ステートメント

SQLはテーブル内の重複レコードをすべて見つけます1. テーブルには id と name の 2 つ...

MySQL の日付フォーマットと複雑な日付範囲クエリ

目次序文クエリの使用シナリオ例時間間隔クエリクエリ日付と今日の時間の比較データ一般的なサイクルタイム...

docker で nginx+php+mysql を設定する方法

まず、方法を理解します。 docker exec を使用して Docker コンテナに入るDocke...

CentOS 7 で MySQL 接続数が 214 に制限される問題の解決方法

問題を見つける最近、プロジェクトで問題が発生しました。接続が多すぎるため、「接続が多すぎます」という...

JavaScript で Priority Queue を実装する

目次1. 優先キューの紹介2. 優先キューのカプセル化1. 優先キューの紹介通常のキューに要素が挿入...

vue+drf+サードパーティのスライディング検証コードアクセスの実装

目次1. 背景2. 検証プロセス3. 検証を作成する4. フロントエンドコード4.1 コアjsファイ...

インデックスを使用して MySQL ORDER BY ステートメントを最適化する方法

テーブルの作成とインデックスの作成 テーブルtbl1を作成( id int ユニーク、sname v...

MySQL のデータの偶発的な削除の解決策と kill ステートメントの原則

mysql が誤ってデータを削除しました削除ステートメントを使用して誤ってデータ行を削除する誤ってデ...

JavaScript 操作要素の例

操作要素の詳細については、前回の記事を参照してください。JavaScript WebAPI、DOM、...

Windows での自動展開に Jenkins を使用するチュートリアル図

今日は、Jenkins + powershell スクリプトを使用して、.NET CORE スクリプ...

JS と Nodejs におけるイベント駆動型開発についての簡単な説明

目次イベント駆動型とパブリッシュ・サブスクライブ型ブラウザの JavaScript ではイベント駆動...

Linux環境で環境変数を設定する方法

JDKダウンロードアドレス: http://www.oracle.com/technetwork/j...