转载

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: 是数据敏感类型游标。
  • 基于以上说明: 不要在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(在没有检索到数据的情况下)也会触发。

正文到此结束
Loading...