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

推薦する

デザインリファレンス 美しく独創的なブログデザイン

以下にリストされているすべてのブログはオリジナルであり、独自にデザインされています。これらは、他者が...

CSSフロートの特性についての簡単な説明

この記事では、CSS フロートの特徴を紹介します。皆さんと共有し、自分用のメモとして残したいと思いま...

Mysql のデッドロックの表示とデッドロックの除去の詳細な説明

序文しばらく前にMysqlのデッドロック問題に遭遇したので、解決しました。問題の説明: Mysql ...

Dockerでホストファイルをカスタマイズする方法について簡単に説明します

目次1. コマンド2. docker-compose.yml 3. Dockerファイル4. 直接変...

JSホモロジー戦略とCSRFの詳細な説明

目次概要同一生成元ポリシー (SOP)相同制限クロスドメインをバイパスクロスサイトリクエストフォージ...

Linux コマンドラインでパケットをキャプチャするために tcpdump を使用するいくつかの機能

tcpdump は、ネットワークの問題のトラブルシューティングに効果的に役立つ、柔軟で強力なパケット...

MySQL で準備、実行、割り当て解除ステートメントを使用するチュートリアル

序文MySQLでは、準備、実行、割り当て解除を正式にはPREPARE STATEMENTと呼びます。...

1つの記事でTypeScriptのデータ型について学ぶ

目次基本タイプあらゆるタイプ配列タプルインタフェース関数自己推論を入力する結合タイプ(1つ以上選択)...

IP アドレス経由で MySql にアクセスする方法

1. mysqlにログインします。 mysql -u ルート -h 127.0.0.1 -p 2. ...

WeChatアプレットはビデオプレーヤーのビデオコンポーネントを使用します

この記事の例では、WeChatアプレットのビデオプレーヤーコンポーネントの具体的なコードを参考までに...

Vueは画像のズームとドラッグをサポートするリッチテキストエディタを統合しています

必要:ビジネス要件によると、写真をアップロードできる必要があり、アップロードされた写真はモバイル端末...

CSS属性のマージンの理解について話す

1.マージンとは何ですか?マージンは、要素の周囲のスペースの間隔を制御するために使用され、視覚的にス...

Centos で MySQL パスワードを変更する方法

1. MySQL ログイン設定を変更します。 # vim /etc/my.cnf文を追加: skip...

LeetCode の SQL 実装 (196. 重複するメールボックスを削除する)

[LeetCode] 196.重複したメールを削除するSQL クエリを記述して、Person とい...

Docker で Java 8 Spring Boot アプリケーションを開発する方法

この記事では、ローカル マシンに Java 8 をインストールせずに、Java 8 を使用して簡単な...