mysql cursor 游标
以下说明基于mysql 5.5。
概述:我知道大部分人对于mysql游标使用的不多。mysql大多数情况可以用“集合”操作,即可满足90%的需求。mysql cursor作为对“记录”操作,是操作数据的一种补充。
mysql cursor三大特性(大三“坑”):
1、只读的:cursor本身不提供修改数据的操作,只能fetch columns into variables。(当然你可以把数据拿出来以后,再用update语句更新。但是有坑,第三点说明)。
2、不能滚动的:只能向一个方向遍历数据,不能回滚,不能随意进退,不能跳过某些记录。
3、数据敏感的(大坑):游标分为两类,一类为数据敏感类型的游标,一类为非数据敏感类型的游标。
- 数据敏感类型游标:游标指向实际的数据,遍历数据时,如果其他session修改了当前cursor遍历的数据集合,会影响当前游标的行为。
- 非数据敏感类型游标:游标查询的数据集合放入到一个临时表中,游标指向临时表的记录集合。
- mysql cursor: 是数据敏感类型游标。官方英文说明:The server may or may not make a copy of its result table.
- 基于以上说明: 不要更新mysql游标打开表的数据。(也有部分资料说:不要更新游标声明语句中select statement的where条件字段)
mysql cursor无关紧要的特性:
1、游标只能在存储过程中使用,包含在BEGIN ... END statement中。
2、需要close cursor关闭游标,释放资源。其实如果不释放,在END statement结束以后,自动释放cursor。
3、游标的声明语句必须放在所有变量的声明语句之后。
4、游标的声明语句必须关联select statement。
5、定义一个CONTINUE HANDLER FOR NOT FOUND,可以帮助游标在fetch no data的时候,跳出fetch循环。
6、CONTINUE HANDLER FOR NOT FOUND 这个条件不仅仅针对游标没有找到数据会触发,针对其他select statement(在没有检索到数据的情况下)也会触发。
posted on 2015-08-02 15:34 magic.xiao 阅读(3864) 评论(0) 收藏 举报