【第二十二部分】游标

【第二十二部分】游标



22. 游标

22.1 游标的定义

当我们筛选条件的时候,虽然可以使用WHERE或者HAVING去选出我们想要的字段,但是去无法将一大块的结果集进行遍历,从而更加细致的处理数据。

这个时候就可以使用游标,游标是一种临时的数据库对象,可以指向存储在数据库表中的数据行指针,这里游标充当了指针的作用,我们可以通过操作游标来对数据行进行操作。


22.2 游标的使用

  1. 声明游标 DECLARE 游标名 CURSOR FOR 写sql语句;
  2. 打开游标 OPEN 游标名;
  3. 使用游标 FETCH 游标名 INTO variable_name; 表示游标来读取当前行,并且将数据保存到 variable_name如果游标读取的数据行有多个列名,则在 INTO 关键字后面赋值给多个变量名即可
  4. 关闭游标 CLOSE 游标名;

举例说明

# 创建存储过程“get_count_by_limit_total_salary()”,声明IN参数 limit_total_salary,DOUBLE类型;声明OUT参数total_count,INT类型。函数的功能可以实现累加薪资最高的几个员工的薪资值,直到薪资总和达到limit_total_salary参数的值,返回累加的人数给total_count。


DELIMITER //
CREATE PROCEDURE get_count_by_limit_total_salary(IN limit_total_salary DOUBLE,OUT total_count INT)
BEGIN 
	DECLARE cur_salary DOUBLE DEFAULT 0.0; # 存储当前游标所指向的数据
	DECLARE sum_salary DOUBLE DEFAULT 0.0; # 总金额
	DECLARE t_count INT DEFAULT 0;
	# 声明游标
	DECLARE cursor_name CURSOR FOR SELECT salary FROM employees ORDER BY salary DESC;
	
	# 打开游标
	OPEN cursor_name;
	
	WHILE sum_salary <= limit_total_salary DO
		# 使用游标
		# 该操作是将当前所指向的数据存储到cur_salary变量中
		FETCH cursor_name INTO cur_salary;
		# 累加
		SET sum_salary = sum_salary + cur_salary;
		SET t_count = t_count + 1;
	END WHILE;
	
	SET total_count = t_count;
	# 关闭游标
	CLOSE cursor_name;
END //
DELIMITER ;

CALL get_count_by_limit_total_salary(70000,@total_count);
SELECT @total_count;

22.3 游标优缺点

优点

  1. 能够更加细致的处理数据,达到预期效果
  2. 游标可以在存储程序中使用,效率高,程序也更加简洁
  3. 操作灵活,可以对结果集进行逐行定位

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


总结

以上就是今天要讲的内容,希望对大家有所帮助!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值