数据库游标游标概念
游标的一个常见用途就是保存查询结果,以便以后使用。游标的结果集是由Select语句产生,如果处理过程需要重复使用一个记录集,那么创建一次游标而重复使用若干次,比重复查询数据库要快的多。
其实游标让我想起了一个做过一个多人编辑csv文件的项目,这个项目落地的时候遇到了一个问题,就是同步编辑的覆盖和冲突问题。当时独立开辟的共享内存,将整个表格的内容刷进共享内存,每个人登陆之后所使用的的都是独立的空间,互不干涉。
但是这样也可能遇见写入同一行的问题。简单的来说,游标需要在内存中开辟一片空间去保存查询的视图。然后用游标去控制查询出表格的内容。‘’
举个例子 二维数组的调用,和游标的滑动就如出一辙了。
游标声明语句
DECLARE cursor_name CURSOR FOR select_statement
未查询,也未开辟空间
游标关闭语句
CLOSE cursor_name
打开游标
OPEN cursor_name
游标
Fetch语句
FETCH cursor_name INTO var_name [, var_name] ...
这个语句用指定的打开游标读取下一行(如果有下一行的话),并且前进游标指针。
1、允许程序对由查询语句select返回的行集合中的每一行执行相同或不同的操作,而不是对整个行集合执行同一个操作。
2、提供对基于游标位置的表中的行进行删除和更新的能力。
3、游标实际上作为面向集合的数据库管理系统(RDBMS)和面向行的程序设计之间的桥梁,使这两种处理方式通过游标沟通起来。
游标测试:
CREATE PROCEDURE testCursor()
BEGIN
DECLARE sum INT;
DECLARE testcur cursor for select id from persons;
open testcur;
fetch testcur into sum;
SELECT CONCAT('显示数据',sum);
fetch testcur into sum;
SELECT CONCAT('显示数据',sum);
close testcur;
END
call testCursor()
具体的循环条件,参考存储过程
踩了很多坑,最坑的一个是游标只能在存储过程中写。其他部分无法写。
Fetch 相当于 for语言的next。
数据库的回顾到此结束。下一个专题讲解mybatis框架
下一周是Activity流的概念。
务求讲精每一个部分。想想很久以前,其实这些东西我也会。
代码员始终要记住,其实工具只是产生效益的一种加速工具。而脑子是永远能吃的好东西。