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チャートを使用した実装を導入します

推薦する

要素を中央に配置するための配置方法 (Web ページ レイアウトのヒント)

ブラウザウィンドウの中央に要素を配置する方法まず、コード ブロックを示します。すでにコードを理解して...

Node.jsミドルウェアの仕組みの詳細な説明

目次Express ミドルウェアとは何ですか? Expressミドルウェアを作成するための要件Exp...

React コードを共有するためのベストプラクティス

プロジェクトがある程度複雑になると、必然的にロジックの再利用の問題に直面することになります。 Rea...

MySQL のスケジュールされた完全なデータベースバックアップ

目次1. MySQLデータのバックアップ1.1、データをバックアップするためのmysqldumpコマ...

Linux ファイアウォールを設定してポート 80 と 3306 を開く方法

ポート80も設定されています。まずファイアウォール設定ファイルを入力しますシェル># vim ...

JS でシンプルなデータ監視を実装する方法

目次概要最初のステップステップ2なぜ別の _data が必要なのでしょうか?データにもう少しデータを...

JavaScript はクリックして画像の形状を変更する (変換アプリケーション) を実装します。

JavaScriptをクリックすると画像の形状が変わります(変形の応用)。参考までに具体的な内容は...

CSS3 テキストシャドウ text-shadow プロパティの詳細な説明

テキストシャドウ text-shadow プロパティの効果: 1. 右下隅の影、左下隅の影、左上隅の...

CSS を使用してテクスチャ付きグラデーション背景画像を記述するためのサンプル コード

プロジェクト内のページの長さはおよそ2000px以上あり、背景画像にはテクスチャやグラデーションがあ...

メモリ構成が過剰でMySQLが起動できない問題の解決方法

問題の説明MySQL の起動時にエラーが報告されます。エラー ログを確認してください。 [エラー] ...

Chrome 4.0 は GreaseMonkey スクリプトをサポートします

GreaseMokey (中国語では Grease Monkey Script と呼んでいます) は...

Vue のスロットとフィルターの詳細な説明

目次スロットスロットとは何ですか?スロットの内容コンパイルスコープフォールバックコンテンツ名前付きス...

ノード スキャフォールディングを使用してトークン検証を実装するサーバーを構築する方法

コンテンツスキャフォールディングを使用してノードプロジェクトを素早く構築するデータベースとやり取りす...

ウェブページの読み込み速度を上げる25の方法とヒント

はじめに<br />誰もが高速インターネット接続にアクセスできるわけではありません。たと...

Dockerコンテナデータをコピーしてバックアップする方法の詳細な説明

ここでは、Jenkins コンテナを例に 3 つの方法を紹介します。方法1コンテナをイメージにパッケ...