游标(Cursor)是一种用于处理查询结果集的数据库对象,它允许开发者按照特定的顺序逐行遍历查询结果集中的数据。游标通常用于在数据库中执行复杂的操作,例如遍历结果集、逐行处理数据、执行更新或删除操作等。
游标的基本思想是将查询结果集封装成一个数据结构,使得开发者可以在程序中按照自己的需求处理这些数据。游标可以类比为一个指向结果集中某一行的指针,您可以在结果集中移动这个指针,从而处理每一行数据。
使用 SQL 游标一般遵循如下步骤。
- 声明游标。首先,您需要声明一个游标,将查询结果集与游标关联起来。
- 打开游标。在使用游标之前,需要打开游标,使其准备好用于遍历数据。
- 遍历数据。您可以使用游标逐行获取数据,并在每一行上执行操作。
- 关闭游标。当您完成了对结果集的操作后,应该关闭游标以释放资源。
MySQL 支持存储程序(如存储过程、函数和触发器)中使用游标。语法与嵌入式SQL中的语法相同。
MySQL 游标具有以下属性:
- 敏感不定(Asensitive)
服务器可能会也可能不会复制其结果集。如果复制的话,为不敏感游标,游标使用实际数据的副本。如果不复制的话,为敏感游标,游标指向实际数据,其他连接所做的任何更改都将影响游标正在使用的数据。
- 只读(Read only)
无法通过游标更新表中的数据。
- 不可滚动(Nonscrollable)
只能沿一个方向遍历,不能跳过行。
游标声明必须出现在处理程序声明之前以及变量和条件声明之后。
下面是一个来自官网的例子。
该语句声明一个游标并将其 SELECT 语句结果集关联起来。要稍后获取行,请使用 FETCH 语句。 SELECT 语句检索的列数必须与 FETCH 语句中指定的输出变量数匹配。
SELECT 语句不能有 INTO 子句。
存储程序可以包含多个游标声明,但给定块中声明的每个游标必须具有唯一的名称。
这个语句打开先前声明的游标。
此语句获取与指定游标(必须打开)关联的 SELECT 语句的下一行,并推进游标指针。 如果行存在,则获取的列存储在命名变量中。 SELECT 语句检索的列数必须与 FETCH 语句中指定的输出变量数匹配。
如果没有更多行可用,则会出现“无数据”条件,且 SQLSTATE 值为“02000”。 要检测此条件,您可以为其设置处理程序(或为 NOT FOUND 条件设置处理程序),请参考文首的示例。
此语句关闭先前打开的游标。
如果游标未打开,则会发生错误。
如果未显式关闭,游标将在声明它的 BEGIN ... END 块的末尾处自动关闭。
MySQL 8.0 Reference Manual :: 13.6.6 Cursors
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/7606.html