# 游标

游标是一种能从包括多条数据记录的结果中每次提取一条记录的机制。它的设计是一种数据缓冲区的思想,用来存放SQL语句执行的结果。尽管游标能遍历结果中的所有行,但一次只会指向一行。它的作用就是用于对查询数据库所返回的记录进行遍历,以便进行相应的操作。

游标具有三个属性:

  • 不敏感(Asensitive):数据库可以选择不复制结果集
  • 只读(Read only)
  • 不滚动(Nonscrollable):游标是只能向一个方向前进的,并且不可以跳过任何一行数据

它的优点是对从数据库中查询得到的结果集的每一行都可以进行分开的独立的相同或者不相同的操作,是一种分离的思想。它的主要是就是性能不高,只能一行一行操作。在数据量较大的情况下,速度过慢。游标可能会造成死锁,内存不足等。

// 定义游标,cursor_name是游标名称,select_statement是查询语句
declare cursor_name cursor for select_statement
// 打开游标
open cursor_name
// 取游标中的数据
fetch cursor_name into var_name
fetch next from cursor_name
fetch prior from cursor_name
fetch first from cursor_name
fetch last from cursor_name
// 关闭游标
close cursor_name
// 释放游标
deallocate cursor_name