网站建设互联网加,手机网站导航菜单源码,网站建设栏目设置表格,中国科技成果【第二十二部分】游标 文章目录【第二十二部分】游标22. 游标22.1 游标的定义22.2 游标的使用22.3 游标优缺点总结22. 游标
22.1 游标的定义
当我们筛选条件的时候#xff0c;虽然可以使用WHERE或者HAVING去选出我们想要的字段#xff0c;但是去无法将一大块的结果集进行遍…【第二十二部分】游标 文章目录【第二十二部分】游标22. 游标22.1 游标的定义22.2 游标的使用22.3 游标优缺点总结22. 游标
22.1 游标的定义
当我们筛选条件的时候虽然可以使用WHERE或者HAVING去选出我们想要的字段但是去无法将一大块的结果集进行遍历从而更加细致的处理数据。
这个时候就可以使用游标游标是一种临时的数据库对象可以指向存储在数据库表中的数据行指针这里游标充当了指针的作用我们可以通过操作游标来对数据行进行操作。 22.2 游标的使用
声明游标 DECLARE 游标名 CURSOR FOR 写sql语句;打开游标 OPEN 游标名;使用游标 FETCH 游标名 INTO variable_name; 表示游标来读取当前行并且将数据保存到 variable_name。如果游标读取的数据行有多个列名则在 INTO 关键字后面赋值给多个变量名即可。关闭游标 CLOSE 游标名;
举例说明
# 创建存储过程“get_count_by_limit_total_salary()”声明IN参数 limit_total_salaryDOUBLE类型声明OUT参数total_countINT类型。函数的功能可以实现累加薪资最高的几个员工的薪资值直到薪资总和达到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 游标优缺点
优点
能够更加细致的处理数据达到预期效果游标可以在存储程序中使用效率高程序也更加简洁操作灵活可以对结果集进行逐行定位
缺点使用游标的过程中会对数据行进行加锁这样在业务并发量大的时候不仅会影响业务之间的效率还会消耗系统资源造成内存不足这是因为游标是在内存中进行的处理。 总结
以上就是今天要讲的内容希望对大家有所帮助