mysql では、カーソルはポインタとして機能し、主に、対応する操作を実行するためにデータベースへのクエリによって返されたレコード結果セットを走査するために使用されます。カーソルは実際には、複数のデータ レコードを含む結果セットから一度に 1 つのレコードを抽出するメカニズムです。リレーショナル データベース管理システムは本質的にセット指向です。MySQL では、WHERE 句を使用して選択するレコードを 1 つだけ制限する場合を除き、テーブル内の単一レコードを記述する式形式がありません。そのため、場合によってはカーソルを使用する必要があります。単一のレコードを選択するデータ処理。
このチュートリアルの動作環境: Windows7 システム、mysql8 バージョン、Dell G3 コンピューター。
MySQL カーソル (カーソル)
カーソルは実際には、複数のレコードを含む結果セットから一度に 1 つのレコードを抽出できるメソッドです。データレコード、メカニズム。
カーソルはポインタとして機能します。
カーソルは結果内のすべての行を移動できますが、一度に指定できるのは 1 行のみです。
カーソルの機能は、対応する操作を実行するために、クエリ データベースから返されたレコードを走査することです。
リレーショナル データベース管理システムは本質的にセット指向です。MySQL では、WHERE 句を使用して 1 つのレコードのみを制限する場合を除き、テーブル内の 1 つのレコードを記述する式形式がありません。選択されました。したがって、場合によっては、単一レコードのデータを処理するためにカーソルを使用する必要があります。
一般に、カーソルは、データ変更のために結果セットの特定の行を見つけるために使用されます。
カーソルの使用法
1. カーソルを宣言します: 宣言カーソル名 CURSOR for table;
(table here Itクエリする任意のコレクションにすることができます)
2. 定義されたカーソルを開きます: open カーソル名;
3. データの次の行を取得します:FETCH カーソルtestrangeid,versionid に名前を付けます;
4. 実行する必要があるステートメント (追加、削除、変更、確認): これは特定の状況によって異なります
5. カーソルを放します:CLOSE カーソル名 ;
注: mysql ストアド プロシージャの各文は; で終わる必要があり、使用される一時フィールドはカーソルを定義する前に宣言する必要があります。
例
- BEGIN --定义变量 declare testrangeid BIGINT; declare versionid BIGINT; declare done int; --创建游标,并存储数据 declare cur_test CURSOR for select id as testrangeid,version_id as versionid from tp_testrange; --游标中的内容执行完后将done设置为1 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1; --打开游标 open cur_test; --执行循环 posLoop:LOOP --判断是否结束循环 IF done=1 THEN LEAVE posLoop; END IF; --取游标中的值 FETCH cur_test into testrangeid,versionid; --执行更新操作 update tp_data_execute set version_id=versionid where testrange_id = testrangeid; END LOOP posLoop; --释放游标 CLOSE cur_test; END -
例 2:
これからストアド プロシージャを使用して、カウントする関数を作成します。 iPhone の総インベントリの値はいくらであり、その合計をコンソールに出力します。
--在windows系统中写存储过程时,如果需要使用declare声明变量,需要添加这个关键字,否则会报错。 delimiter // drop procedure if exists StatisticStore; CREATE PROCEDURE StatisticStore() BEGIN --创建接收游标数据的变量 declare c int; declare n varchar(20); --创建总数变量 declare total int default 0; --创建结束标志变量 declare done int default false; --创建游标 declare cur cursor for select name,count from store where name = 'iphone'; --指定游标循环结束时的返回值 declare continue HANDLER for not found set done = true; --设置初始值 set total = 0; --打开游标 open cur; --开始循环游标里的数据 read_loop:loop --根据游标当前指向的一条数据 fetch cur into n,c; --判断游标的循环是否结束 if done then leave read_loop; --跳出游标循环 end if; --获取一条数据时,将count值进行累加操作,这里可以做任意你想做的操作, set total = total + c; --结束游标循环 end loop; --关闭游标 close cur; --输出结果 select total; END; --调用存储过程 call StatisticStore();
fetch は、カーソルが現在指しているデータ行を取得し、ポインタを次の行に向けることです。カーソルがすでに最後の行を指しているときに実行を続けると、カーソル オーバーフローが発生します。
ループ カーソルを使用する場合、データの最後の部分に到達したかどうかは監視されません。次のコードを書くと無限ループが発生します。
read_loop:loop fetch cur into n,c; set total = total+c; end loop;
MySql では、カーソルが MySQL の事前定義された NOT をオーバーフローすると、 FOUND エラーがトリガーされるため、上記のコードは、not found エラーが発生したときに continue イベントを指定し、このイベントが発生したときに Done 変数の値を変更するために使用されています。
declare continue HANDLER for not found set done = true;
したがって、次のコードがループに追加されます:
--判断游标的循环是否结束 if done then leave read_loop; --跳出游标循环 end if;
done の値が true の場合、ループを終了します。次のコードを実行し続けます。
使用方法
カーソルを使用するには 3 つの方法があります。
最初の実装は、loop ループを使用する上記の実装です。 ;
2 番目の方法は、while ループを使用するものです:
drop procedure if exists StatisticStore1; CREATE PROCEDURE StatisticStore1() BEGIN declare c int; declare n varchar(20); declare total int default 0; declare done int default false; declare cur cursor for select name,count from store where name = 'iphone'; declare continue HANDLER for not found set done = true; set total = 0; open cur; fetch cur into n,c; while(not done) do set total = total + c; fetch cur into n,c; end while; close cur; select total; END; call StatisticStore1();
3 番目の方法は、繰り返し実行を使用するものです:
drop procedure if exists StatisticStore2; CREATE PROCEDURE StatisticStore2() BEGIN declare c int; declare n varchar(20); declare total int default 0; declare done int default false; declare cur cursor for select name,count from store where name = 'iphone'; declare continue HANDLER for not found set done = true; set total = 0; open cur; repeat fetch cur into n,c; if not done then set total = total + c; end if; until done end repeat; close cur; select total; END; call StatisticStore2();
カーソルの入れ子
mysql では、begin end ブロックはそれぞれ独立したスコープ領域となっており、MySql では同じエラーイベントを複数回定義しても 1 回しか定義できないため、 , コンパイル時に、同じブロックで宣言された Duplicate ハンドラーを要求するメッセージが表示されます。
drop procedure if exists StatisticStore3; CREATE PROCEDURE StatisticStore3() BEGIN declare _n varchar(20); declare done int default false; declare cur cursor for select name from store group by name; declare continue HANDLER for not found set done = true; open cur; read_loop:loop fetch cur into _n; if done then leave read_loop; end if; begin declare c int; declare n varchar(20); declare total int default 0; declare done int default false; declare cur cursor for select name,count from store where name = 'iphone'; declare continue HANDLER for not found set done = true; set total = 0; open cur; iphone_loop:loop fetch cur into n,c; if done then leave iphone_loop; end if; set total = total + c; end loop; close cur; select _n,n,total; end; begin declare c int; declare n varchar(20); declare total int default 0; declare done int default false; declare cur cursor for select name,count from store where name = 'android'; declare continue HANDLER for not found set done = true; set total = 0; open cur; android_loop:loop fetch cur into n,c; if done then leave android_loop; end if; set total = total + c; end loop; close cur; select _n,n,total; end; begin end; end loop; close cur; END; call StatisticStore3();
上記はネストされたループを実装するものですが、もちろん、この例は突飛です。ちょっと見てください。
動的 SQL
Mysql は動的 SQL 関数をサポートしています
set @sqlStr='select * from table where condition1 = ?'; prepare s1 for @sqlStr; --如果有多个参数用逗号分隔 execute s1 using @condition1; --手工释放,或者是 connection 关闭时, server 自动回收 deallocate prepare s1;
[関連する推奨事項: mysql ビデオ チュートリアル ]
以上がmysqlカーソルの用途は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于架构原理的相关内容,MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层,下面一起来看一下,希望对大家有帮助。

在mysql中,可以利用char()和REPLACE()函数来替换换行符;REPLACE()函数可以用新字符串替换列中的换行符,而换行符可使用“char(13)”来表示,语法为“replace(字段名,char(13),'新字符串') ”。

mysql的msi与zip版本的区别:1、zip包含的安装程序是一种主动安装,而msi包含的是被installer所用的安装文件以提交请求的方式安装;2、zip是一种数据压缩和文档存储的文件格式,msi是微软格式的安装包。

方法:1、利用right函数,语法为“update 表名 set 指定字段 = right(指定字段, length(指定字段)-1)...”;2、利用substring函数,语法为“select substring(指定字段,2)..”。

转换方法:1、利用cast函数,语法“select * from 表名 order by cast(字段名 as SIGNED)”;2、利用“select * from 表名 order by CONVERT(字段名,SIGNED)”语句。

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于MySQL复制技术的相关问题,包括了异步复制、半同步复制等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了mysql高级篇的一些问题,包括了索引是什么、索引底层实现等等问题,下面一起来看一下,希望对大家有帮助。

在mysql中,可以利用REGEXP运算符判断数据是否是数字类型,语法为“String REGEXP '[^0-9.]'”;该运算符是正则表达式的缩写,若数据字符中含有数字时,返回的结果是true,反之返回的结果是false。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

Dreamweaver Mac版
ビジュアル Web 開発ツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。
