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 リモート デスクトップ ライセンス サーバーがライセンスを提供できず、リモート セッションが切断される

推薦する

Win7 の VMware 仮想マシンに Linux7.2 をインストールするインターネット アクセス構成チュートリアル

参考までに、win7システム上のVMware仮想マシンにlinux7.2インターネットアクセス構成を...

HTML における iFrame タグの 2 つの使用法

最近、私は「ぶどうコレクション」というプロジェクトに取り組んでいます。簡単に言うと、Budou ペー...

Vueデータプロキシの詳細な説明

目次1. これからお話しするのは、フロントエンド担当者がvue-cliで完了できるソリューション、デ...

geoip を使用して nginx で地域を制限する方法

このブログは仕事のメモです環境: nginx バージョン: nginx/1.14.0 Centos ...

Vue でのルーティングガードの具体的な使用法

目次1. グローバルガード1.1 グローバルフロントガード1.2 グローバルポストルートガード1.3...

NginxはGzipアルゴリズムを使用してメッセージを圧縮します

HTTP圧縮とは場合によっては、比較的大きなメッセージ データがクライアントとサーバー間で送信され、...

Vue3 でタイマーコンポーネントをカプセル化する方法

背景一部のショッピング モールの Web ページで商品の詳細を開くと、購入数量を選択するためのカウン...

MySQL の日付関数と日付変換およびフォーマット関数

MySQL は、膨大なユーザーベースを持つ無料のリレーショナル データベースです。この記事では、My...

JavaScript でカルーセル効果を実装する

この記事では、カルーセルの効果を実現するためのJavaScriptの具体的なコードを参考までに共有し...

CSS3 のフレックスレイアウト幅の無効性の解決策

2 列レイアウトはプロジェクトでよく使用されます。この効果を実現する方法はたくさんあります。 しかし...

Vue プロジェクトの最初の画面のパフォーマンス最適化コンポーネントの実践ガイド

目次Vue ファースト スクリーン パフォーマンス最適化コンポーネント説明するインターセクションオブ...

MySQL 5.7 における基本的な JSON 操作ガイド

序文プロジェクトのニーズにより、ストレージ フィールドは JSON 形式で保存されます。プロジェクト...

Docker5フル機能の港湾倉庫構築プロセス

Harbor は、Docker イメージを保存および配布するためのエンタープライズ レベルのレジスト...

Mysqlデータテーブルでワームレプリケーションを使用する方法

簡単に言えば、MySQL ワーム レプリケーションは、クエリされたデータを指定されたデータ テーブル...

回転するフリップカードアニメーションの効果を実現するCSS

回転フリップ効果の CSS アニメーション、具体的な内容は次のとおりです。 1. まず2つのボックス...