热点
容器编排:服务器效率的量子跃迁,reasoning_content:我们要求以后端分布式追踪专家的口吻,写一个与技术、科技相关,关于[容器化部署与编排:服务器效率的飞跃之道]的标题直接输出一个标题,不要加说明提示等信息简短精炼,字数控制在30字以内nn需要体现出专家口吻,技术感,容器化部署与编排,服务器效率飞跃nn可能的容器编排:服务器效率的量子跃迁?或者:容器化部署:服务器效率的蝴蝶效应?或者更直接的:容器编排:服务器效率的颠覆性提升但要求简短,30字以内nn作为分布式追踪专家,可能会强调可观测性、效率、弹性等例如:容器编排:从资源碎片到效率飞跃或者:容器化部署:服务器效率的指数级增长但需要更精炼,有吸引力nn我想到:容器编排:服务器效率的“降维打击”或者:容器化:服务器效率的量子飞跃字数:容器化部署:服务器效率的飞跃之道(正好12字)但是原题已经给出了这个短语,我们可能需要创新nn或者:容器编排:服务器效率的核聚变但不够技术nn考虑到是后端分布式追踪专家,可以加入追踪视角:容器编排:分布式追踪下的效率革命但可能会偏题nn直接给出一个容器化编排:服务器效率的跃迁之道字数11nn或者:容器编排:服务器效率的“云”端飞跃字数13nn最好用专家口吻,有科技感我想到:容器化部署:服务器效率的“虫洞”穿越但有点科幻nn更稳妥:容器编排:服务器效率的颠覆性提升字数16nn或者:容器编排:服务器效率的蝶变效应字数13nn用量子跃迁比较常见最后决定:容器编排:服务器效率的量子跃迁字数13
集群容器编排系统优化分类应用策略,reasoning_content:我们要求以前端架构师的口吻,写一个与“技术、科技”相关,关于[基于系统优化的容器编排策略在服务器集群中的分类应用]的标题直接输出一个标题,不要加说明提示;简短精炼,字数30字以内nn注意:题目是基于系统优化的容器编排策略在服务器集群中的分类应用,需要提炼成标题前端架构师的口吻,可以突出前端视角或系统优化、容器编排等可能的关键词:系统优化、容器编排、服务器集群、分类应用可以写成类似系统优化驱动的容器编排策略在集群中的分类实践但需要更精炼nn考虑30字以内例如:集群容器编排的系统优化策略分类应用 但稍长或者基于系统优化的集群容器编排策略分类nn或许更前端口吻?前端架构师可能关注性能、效率、可扩展性等可以写前端架构视角:集群容器编排的系统优化策略 但超过30字?数一下:前端架构视角:集群容器编排的系统优化策略 (18个字?前端架构视角:集群容器编排的系统优化策略 共?前端(2)架构(2)视角(2):(1)集群(2)容器(2)编排(2)的(1)系统(2)优化(2)策略(2) = 18个汉字?加上冒号?但注意字数限制30字,中文每个字算一个可以更短nn或者系统优化容器编排在集群中的分类应用 15字但需要体现策略可以考虑集群容器编排:系统优化的分类策略 13字但分类策略可能不够明确nn更准确:基于系统优化的容器编排集群分类策略 15字但缺少应用直接系统优化:容器编排集群分类应用 13字nn或者系统优化驱动的容器编排集群分类 13字nn为了显得前端架构师口吻,可以加前端架构但可能多余最终输出:直接一个标题
15 9 月 2026, 周二

游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。

游标充当指针的作用。

尽管游标能遍历结果中的所有行,但他一次只指向一行。

游标的作用就是用于对查询数据库所返回的记录进行遍历,以便进行相应的操作。

关系数据库管理系统实质是面向集合的,在 MySQL 中并没有一种描述表中单一记录的表达形式,除非使用 WHERE 子句来限制只有一条记录被选中。所以有时我们必须借助于游标来进行单条记录的数据处理。

一般通过游标定位到结果集的某一行进行数据修改。

游标的用法

1、声明一个游标: declare 游标名称 CURSOR for table;(这里的table可以是你查询出来的任意集合)

2、打开定义的游标:open 游标名称;

3、获得下一行数据:FETCH  游标名称 into 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;  

在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,就结束循环。继续执行下面的代码

使用方式

游标有三种使用方式:
第一种就是上面的实现,使用loop循环;
第二种方式如下,使用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();

在mysql中,每个begin end 块都是一个独立的scope区域,由于MySql中同一个error的事件只能定义一次,如果多定义的话在编译时会提示Duplicate handler declared in the same block。

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游标的作用是什么”这篇文章的所有内容,感谢各位的阅读!
 

dawei

【声明】:聊城站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

您错过了