设计店面装修,seo主要做哪些工作,网站能不能自己做,网站建设需要做什么文章目录 1.游标是什么2.MySQL 游标3.定义游标4.打开游标5.提取数据6.关闭游标参考文献 1.游标是什么
游标#xff08;Cursor#xff09;是一种用于处理查询结果集的数据库对象#xff0c;它允许开发者按照特定的顺序逐行遍历查询结果集中的数据。游标通常用于在数据库中执… 文章目录 1.游标是什么2.MySQL 游标3.定义游标4.打开游标5.提取数据6.关闭游标参考文献 1.游标是什么
游标Cursor是一种用于处理查询结果集的数据库对象它允许开发者按照特定的顺序逐行遍历查询结果集中的数据。游标通常用于在数据库中执行复杂的操作例如遍历结果集、逐行处理数据、执行更新或删除操作等。
游标的基本思想是将查询结果集封装成一个数据结构使得开发者可以在程序中按照自己的需求处理这些数据。游标可以类比为一个指向结果集中某一行的指针您可以在结果集中移动这个指针从而处理每一行数据。
使用 SQL 游标一般遵循如下步骤。
声明游标。首先您需要声明一个游标将查询结果集与游标关联起来。打开游标。在需要使用游标之前您需要打开游标使其准备好用于遍历数据。遍历数据。您可以使用游标的操作来逐行地获取数据并在每一行上执行操作。关闭游标。当您完成了对结果集的操作后应该关闭游标以释放资源。
2.MySQL 游标
MySQL 支持存储程序如存储过程、函数和触发器中使用游标。语法与嵌入式SQL中的语法相同。
MySQL 游标具有以下属性
敏感不定Asensitive
服务器可能会也可能不会复制其结果集。如果复制的话为不敏感游标游标使用实际数据的副本。如果不复制的话为敏感游标游标指向实际数据其他连接所做的任何更改都将影响游标正在使用的数据。
只读Read only
无法通过游标更新表中的数据。
不可滚动Nonscrollable
只能沿一个方向遍历不能跳过行。
游标声明必须出现在处理程序声明之前以及变量和条件声明之后。
下面是一个来自官网的例子。
CREATE PROCEDURE curdemo()
BEGINDECLARE done INT DEFAULT FALSE;DECLARE a CHAR(16);DECLARE b, c INT;DECLARE cur1 CURSOR FOR SELECT id,data FROM test.t1;DECLARE cur2 CURSOR FOR SELECT i FROM test.t2;DECLARE CONTINUE HANDLER FOR NOT FOUND SET done TRUE;OPEN cur1;OPEN cur2;read_loop: LOOPFETCH cur1 INTO a, b;FETCH cur2 INTO c;IF done THENLEAVE read_loop;END IF;IF b c THENINSERT INTO test.t3 VALUES (a,b);ELSEINSERT INTO test.t3 VALUES (a,c);END IF;END LOOP;CLOSE cur1;CLOSE cur2;
END;3.定义游标
DECLARE cursor_name CURSOR FOR select_statement该语句声明一个游标并将其 SELECT 语句结果集关联起来。要稍后获取行请使用 FETCH 语句。 SELECT 语句检索的列数必须与 FETCH 语句中指定的输出变量数匹配。
SELECT 语句不能有 INTO 子句。
存储程序可以包含多个游标声明但给定块中声明的每个游标必须具有唯一的名称。
4.打开游标
OPEN cursor_name这个语句打开先前声明的游标。
5.提取数据
FETCH [[NEXT] FROM] cursor_name INTO var_name [, var_name] ...此语句获取与指定游标必须打开关联的 SELECT 语句的下一行并推进游标指针。 如果行存在则获取的列存储在命名变量中。 SELECT 语句检索的列数必须与 FETCH 语句中指定的输出变量数匹配。
如果没有更多行可用则会出现“无数据”条件且 SQLSTATE 值为“02000”。 要检测此条件您可以为其设置处理程序或为 NOT FOUND 条件设置处理程序请参考文首的示例。
6.关闭游标
CLOSE cursor_name此语句关闭先前打开的游标。
如果游标未打开则会发生错误。
如果未显式关闭游标将在声明它的 BEGIN … END 块的末尾处自动关闭。 参考文献
MySQL 8.0 Reference Manual :: 13.6.6 Cursors