mysql 、sql server 游标 cursor

游标 声明的位置

游标必须在声明处理程序之前 被声明,并且变量和条件还必须在声明游标或处理程序之前被声明

游标的使用步骤

  1. 声明游标
  2. 打开游标
  3. 使用游标
  4. 关闭游标 (sql server 关闭游标和释放游标)

sql server 游标

复制代码
declare my_cursor cursor for   select   字段1 [, 字段2,。。。字段n ] from  表名 或视图    [ where ]
open my_cursor 
fetch next my_sursor   into    变量1  --  此处变量要在声明游标之前 定义
while @@FETCH_STATUS=0   ---  一个等号  
begin
		sql  语句执行操作
		fetch next my_sursor   into    变量1  --  游标向下移动 一行
end
close   my_cursor
deallcate my_cursor


----案例   

create  PROCEDURE [dbo].[pro_zen]		
	
AS
BEGIN
	declare  @cnt int = 0
	declare  @sco int = 0
	declare  @total int = 0
	---  定义游标
	declare my_cursor  cursor for  select score from Table_1  order by score DESC
	--   打开游标
	open my_cursor
	--   使用游标
	fetch next from my_cursor into @sco 
   while @@FETCH_STATUS=0
	begin
		set @total=@total+@sco
		set @cnt=@cnt+1
		if @total >500 
			break	
        fetch next from my_cursor into @sco 

	end
	print @cnt 
	print @total
	--  关闭游标 
	close my_cursor
	---  释放游标
	deallocate my_cursor
END


mysql 游标


1、声明游标

在Mysql中,使用Declare关键字来声明游标

declare cursor_name cursor for select_statement; ----mysql 、sqlserver

declare cursor_name cursor is select_statement; ----Oracle

上面的 select_statement 代表的是select语句,返回一个用于创建游标的结果集

2、打开游标

open cursor_name ;

定义好游标之后,如果想要使用游标,必须先打开游标,打开游标的时候,select语句的查询结果就会送到游标工作区,为后面游标的逐条读取结果集中的记录做准备

3、使用游标,从游标中获得数据

Fetch cursor_name into var_name [,...var_namen] ;

使用 cursor_name 这个游标来读取当前行,并且将数据保存到var_name这个变量中(这个变量要在声明游标之前定义),游标指针指到下一行 。 如果游标读取的数据行有多个列名,则在into 关键字后面赋值给多个变量名即可。
注意

var_name 必须在声明游标之前定义。

游标的查询结果(select_statement)中的字段, 必须 必须 必须 跟into 后面 的变量 数量保持一致。

Fetch cursor_name into var_name1,var_name2 ; ### 多个变量之间用逗号隔开

4、关闭游标

close cursor_name ;

游标的优缺点

优点

游标是 sql 中重要功能,为了追条读取 结果集中的数据,提供了完美的解决方案。跟在应用层面实现相同的功能相比。

游标可以在存储过程 中使用,效率高,程序也更加简洁。
缺点

在使用游标的过程中,会对数据进行 加锁 。这样在业务并发量大的时候,不但会影响业务之间的效率,还会 消耗系统资源,造成内存不足,这是因为游标是在内存中进行处理的。

建议: 养成用完游标之后,记着close。 这样可以释放资源,提高效率。

相关推荐
程序新视界9 分钟前
在MySQL中,一条SQL语句的执行全流程是怎样的?
数据库·后端·mysql
雨白10 分钟前
掌握协程的边界与环境:CoroutineScope 与 CoroutineContext
android·kotlin
木易 士心1 小时前
Android 开发核心知识体系与面试指南精简版
android·面试·职场和发展
todoitbo1 小时前
我用 TRAE 做了一个不一样的 MySQL MCP
数据库·mysql·adb·ai工具·mcp·trae·mysql-mcp
一棵树73512 小时前
Android OpenGL ES初窥
android·大数据·elasticsearch
初级代码游戏2 小时前
MAUI劝退:安卓实体机测试
android
阿维的博客日记3 小时前
从夯到拉的Redis和MySQL双写一致性解决方案排名
redis·分布式·mysql
奔跑中的蜗牛6663 小时前
直播APP跨平台架构实践(二):KMP UI 与 Rust 下载引擎协作实践
android
沐怡旸3 小时前
【底层机制】【Android】AIDL原理与实现机制详解
android·面试
21号 13 小时前
16.MySQL 服务器配置与管理
服务器·数据库·mysql