mysql cursor游标

游标(Cursor)它使用户可逐行访问由SQL Server返回的结果集。 
使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式。
优点
1、允许程序对由查询语句select返回的行集合中的每一行执行相同或不同的操作,而不是对整个行集合执行同一个操作。



2、提供对基于游标位置的表中的行进行删除和更新的能力。



3、游标实际上作为面向集合的数据库管理系统(RDBMS)和面向行的程序设计之间的桥梁,使这两种处理方式通过游标沟通起来。



原理
游标就是把数据按照指定要求提取出相应的数据集,然后逐条进行数据处理。



使用游标的顺序
 声名游标、打开游标、读取数据、关闭游标、删除游标。



使用游标(cursor)
1.声明游标
DECLARE cursor_name CURSOR FOR select_statement
这个语句声明一个游标。也可以在子程序中定义多个游标,但是一个块中的每一个游标必须有唯一的名字。声明游标后也是单条操作的,但是不能用SELECT语句不能有INTO子句。





  1. 游标OPEN语句
    OPEN cursor_name       这个语句打开先前声明的游标。




  2. 游标FETCH语句
    FETCH cursor_name INTO var_name [, var_name] …这个语句用指定的打开游标读取下一行(如果有下一行的话),并且前进游标指针。




  3. 游标CLOSE语句
    CLOSE cursor_name  这个语句关闭先前打开的游标。





特性
1,只读的,不能更新的。
2,不滚动的
3,不敏感的,不敏感意为服务器可以活不可以复制它的结果表

https://blog.csdn.net/weixin_42981419/article/details/86162179



一、声明一个游标: declare 游标名称 CURSOR for table;(这里的table可以是你查询出来的任意集合)
二、打开定义的游标:open 游标名称;
三、获得下一行数据:FETCH 游标名称 into testrangeid,versionid;
四、需要执行的语句(增删改查):这里视具体情况而定
五、释放游标:CLOSE 游标名称;
注:mysql存储过程每一句后面必须用;结尾,使用的临时字段需要在定义游标之前进行声明。
https://www.cnblogs.com/loong-hon/p/11003189.html



游标的特性



不敏感:数据库可以选择不复制结果集



只读



不滚动:游标只能向一方向前进,并且不可以跳过任何一行数据



游标的优点



游标是针对行操作的,对从数据库中 select 查询得到的结果集的 每一行可以



进行分开的独立的相同或者不相同的操作,是一种分离的思想。



游标的缺点



性能不高



只能一行一行操作



使用游标会产生死锁,造成内存开销大



游标的适用场景



存储过程



函数



触发器



事件



游标的操作
1、游标的定义



DECLARE 光标名称 CURSOR FOR 查询语法



declare cursor_name cursor for select_statement



2、打开游标



OPEN 光标名称



open cursor_name



3、取游标中的数据



FETCH 光标名称 INFO var_name [,var_name ]…..



fetch cursor_name info var_name



4、关闭游标



CLOSE curso_name;



close 光标名称



5、释放游标



DEALLOCATE 光标名称



deallocate cursor_name;
https://www.cnblogs.com/oukele/p/10684639.html
https://www.cnblogs.com/darwinli/p/9052796.html
https://blog.csdn.net/u014138443/article/details/88676612


Category storage