MySQL カーソルの原理と使用例の分析

MySQL カーソルの原理と使用例の分析

この記事では、例を使用して MySQL カーソルの原理と使用方法を説明します。ご参考までに、詳細は以下の通りです。

この記事の内容:

  • カーソルとは何か
  • カーソルの作成
  • カーソルの使用

リリース日: 2018-04-18


カーソルとは何か:

  • 以前に mysql 関数を見たことがあれば、複数行の結果を返すステートメントは使用できないことがわかります。しかし、実際に使用したい場合は、カーソルを使用する必要があります。カーソルを使用すると、結果を選択できます (単一の結果を返すことができるようになります)。
  • さらに、カーソルを使用すると、取得した行内で 1 行以上進んだり戻ったりする結果を簡単に取得できます。
  • カーソルは、返された結果の複数行を反復処理できます。

補充:

  • MySQL では、カーソルはストアド プロシージャと関数にのみ適用されます。


カーソルを作成します。

  • 文法:
    • 1. カーソルを定義します。declare cursor name cursor for select statement;
    • 2. カーソルを開きます: open cursor name;
    • 結果を取得: カーソル名を変数名 [, 変数名] に取得します。
    • カーソルを閉じる: カーソル名を閉じる;
      プロシージャ p1() を作成する
      始める
        id int を宣言します。
        名前を宣言するvarchar(15);
        --カーソルを宣言する。declare mc cursor for select * from class;
        -- カーソルを開きます open mc;
        -- 結果を取得するには、fetch mc into id,name;
        -- 結果を表示するには、select id,name; を実行します。
        -- カーソルを閉じる close mc;
        
      終わり;
      プロシージャ p2() を作成する
      始める
        id int を宣言します。
        名前を宣言するvarchar(15);
        --カーソルを宣言する。declare mc cursor for select * from class;
        -- カーソルを開きます open mc;
        -- 結果ループを取得 -- ループしてテーブルの内容を class2 に転送します fetch mc into id,name;
        -- 結果を表示するには、 insert into class2 values(id,name); を実行します。
        -- カーソル終了ループを閉じます。
        クローズ mc;
        
      終わり;


カーソルの使用:

  • カーソルがフェッチするたびに、結果の行が取得されます。変数を使用して、フェッチされた各列の値を取得できます。
    プロシージャ p2() を作成する
    始める
      id int を宣言します。
      名前を宣言するvarchar(15);
      --カーソルを宣言する。declare mc cursor for select * from class;
      -- カーソルを開きます open mc;
      -- 結果ループを取得 -- ループしてテーブルの内容を class2 に転送します fetch mc into id,name;
      -- 結果を表示するには、 insert into class2 values(id,name); を実行します。
      -- カーソル終了ループを閉じます。
      クローズ mc;
      
    終わり;

上記のコードにはエラーがありますimageループを続けると、必ずテーブルの終わりに到達します。終わりに到達すると、フェッチを続行できません。一般的に言えば、エラーを回避する必要があります。終わりに到達する前に、mysql定義の

プロシージャ p3() を作成する
始める
  id int を宣言します。
  名前を宣言するvarchar(15);
  フラグ int のデフォルトを 0 として宣言します。
  --カーソルを宣言する。declare mc cursor for select * from class;
  見つからない場合の継続ハンドラを宣言し、フラグを 1 に設定します。
  -- カーソルを開きます open mc;
  -- 結果を取得する l2:loop 
  
  mc を id、name に取得します。
  フラグが1の場合 -- フェッチに失敗した場合、ハンドラは続行されます
    l2を残す;
  終了の場合;
  -- 結果を表示するには、 insert into class2 values(id,name); を実行します。
  -- カーソル終了ループを閉じます。
  クローズ mc;
  
終わり;

p3() を呼び出します。-- エラーなし select * from class2;

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

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

以下もご興味があるかもしれません:
  • MySQL カーソルの定義と使用法
  • カーソル ループを使用して、MySQL ストアド プロシージャで一時テーブルを読み取る
  • MySQLでカーソルを宣言する方法
  • MySQLカーソルの使い方と機能の詳細な説明
  • Pythonで徹底的にわかるMySQLデータベース操作(カーソル解説)
  • MySQLストアドプロシージャにおけるカーソル(DECLARE)の原理と使い方の詳細な説明
  • MySQL カーソルの概念と使用法の詳細な説明
  • MySQL ストアド プロシージャ、カーソル、トランザクションの例の詳細な説明
  • Mysql ストアド プロシージャでカーソルを使用する例
  • カーソルを使用したMySQLストアドプロシージャネストループのサンプルコード
  • MySQL ストアド プロシージャでカーソル ループを終了して継続する例
  • MySQL カーソル関数と使用法

<<:  JavaScript オブジェクト (詳細)

>>:  Windows Server 2012 リモート デスクトップ ライセンス サーバーがライセンスを提供できず、リモート セッションが切断される

推薦する

Linuxシステムにおけるプロセス管理の詳細な説明

目次1. プロセスとスレッドの概念2. プロセス管理とは何ですか? 3. プロセス管理の役割4. L...

Vue が Bibibili のホームページを模倣する際の問題

エンジニアリング構造プロジェクトは2つの部分に分かれています。bilibili-apiはAPIインタ...

MYSQL パフォーマンス アナライザー EXPLAIN 使用例分析

この記事では、例を使用して MYSQL パフォーマンス アナライザー EXPLAIN の使用方法を説...

Linux でのログ サーバーの設定に関するグラフィック チュートリアル

序文この記事では、Linux 構成ログ サーバーに関する関連コンテンツを主に紹介し、参考と学習のため...

クールなIoT大画面機能を実現するHTML+VUEページング

効果デモ.html <html> <ヘッド> <メタ文字セット=&qu...

階層化されたピラミッドを実現するための HTML+CSS の例

この記事では主に、HTML+CSS で階層化ピラミッドを実装する例を紹介し、皆さんと共有します。詳細...

画像をラベルとして使用すると、IE では for 属性が機能しません。

例えば:コードをコピーコードは次のとおりです。 <input type="check...

Centos8 (最小インストール) Python3.8+pip のインストール方法に関するチュートリアル

Python8のインストールを最小化した後、Python3.8.1をインストールしました。オンライン...

HTML テーブル マークアップ チュートリアル (5): ライト ボーダー カラー属性 BORDERCOLORLIGHT

表では、左上の境界線の色を個別に定義したり、セルの右下の境界線の色を定義したりできます。これら 2 ...

Vue要素ヘッダーにスラッシュを追加するための実装コード

<テンプレート> <div class="アプリコンテナ"&...

VMware Workstation 12 Pro Linux インストール チュートリアル

この記事は、VMware Workstation 12 ProのインストールLinuxチュートリアル...

HTMLはa要素hrefのURLリンクを自動的に更新したり新しいウィンドウを開いたりする機能を実装する

場合によっては、次のような機能を実装したいことがあります。リンクをクリックします。リンクがブラウザで...

Vue ログインページ用の動的パーティクル背景プラグインの実装

目次動的パーティクル効果は次のとおりです。プラグインをインストールする動的パーティクル効果は次のとお...

MySQL マルチテーブル結合クエリの詳細な説明

目次複数テーブル結合クエリ内部結合左結合右結合サブクエリ要約する複数テーブル結合クエリテーブル間の接...

MySQL で 1 つのテーブルのフィールドを使用して別のテーブルのフィールドを更新する方法

1. 1列を変更する 学生の更新、都市c s.city_name = c.name を設定します こ...