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

推薦する

JS addEventListener() およびattachEvent() メソッドは登録イベントを実装します

JavaScript の DOM イベント モデルでは、オブジェクトの addEventListen...

JavaScriptは双方向リンクリストプロセス分析を実装します

目次1. 二重連結リストとは何か2. 双方向リンクリストのカプセル化3. 双方向リンクリストの一般的...

Windows で負荷分散に Nginx+Tomcat を使用するための完全な手順

序文今日は、Prince が Windows で負荷分散に Nginx + Tomcat を使用する...

ウェブフォーム送信方法の詳細な概要

まず、フォームを送信するいくつかの方法を見てみましょう。 1. <!--一般的な送信ボタン--...

MySql 最適化のための my.ini 中国語構成スキームの詳細な説明: InnoDB、4GB メモリ、および複数のクエリ

この記事は、4G メモリ システム用の MySQL 構成ファイル ソリューションです (主に Inn...

Linuxシステムにおけるキー認証に基づくSSHサービスのプロセス

ご存知のとおり、SSH は現在、リモート ログイン セッションやその他のネットワーク サービスにセキ...

nginx をベースにリロードなしでアップストリーム サーバーの動的な自動起動と停止を実装する方法

目次1. Consulクラスタをデプロイする1. 準備3. Consulクラスタを作成する4. 管理...

IE6 での背景画像キャッシュ

IE6 での CSS 背景画像のちらつきバグ (IE6 の背景画像キャッシュの問題) IE6 は、背...

美容・スタイリングウェブサイト向けのカラーマッチングテクニックと効果表示

色はあらゆるウェブサイトにとって最も重要な要素の 1 つであり、閲覧者に大きな影響を与えるため、色の...

ネイティブ js でカスタム難易度のマインスイーパ ゲームを実装する

この記事の例では、マインスイーパゲームを実装するためのjsの具体的なコードを参考までに共有しています...

WeChatアプレットのスワイパードットのドットをスライダーに変更する方法

目次背景ターゲット効果アイデア成し遂げるスワイパーは変更を聞きますカスタムドットモジュール変更イベン...

Vueプロジェクトウォッチで関数が繰り返しトリガーされる問題の解決

目次問題の説明:解決策1解決策2問題の説明:ページ A と B の 2 つがあり、各ページにはget...

PrometheusとGrafanaを使用したMySQLサーバーのパフォーマンス監視の詳細な説明

概要Prometheus は、HTTP プロトコルを介してリモート マシンからデータを収集し、ローカ...

CSS トランジションを使用した円形ホバー効果のサンプルコード

この記事では ソースコードのオンラインプレビューとダウンロード今日のチュートリアルでは、円のホバー効...

MYSQL フルバックアップ、マスタースレーブレプリケーション、カスケードレプリケーション、および半同期の概要

MySQL フルバックアップ1. バイナリログを有効にし、データベースから分離して別々に保存する v...