MYSQL入门学习之十四:游标的基本操作
2014-07-29 14:18
776 查看
游标(CURSOR)是一个存储在MySQL服务器上的数据库查询,它不是一条SELECT语句,而是被该语句检索出来的结果集。在存储了游标之后,应用程序可以根据需要滚动或浏览其中的数据。
游标主要用于交互式应用,其中用户需要滚动屏幕上的数据,并对数据进行浏览或做出更改。
使用游标需要MySQL5及以上版本支持。
一、使用游标的步骤
在能够使用游标前,必须声明(定义)它。
一旦声明后,必须打开游标以供使用。
对于填有数据的游标,根据需要取出(检索)各行。
在结束游标使用时,必须关闭游标。
二、游标的基本操作
1、创建游标
DECLARE cur_name CURSOR FOR SELECT ****;
示例:
[sql]
view plaincopyprint?
mysql> delimiter //
mysql> create procedure test_cur()
-> begin
-> declare mycur cursor
-> for
-> select userid,username from newname;
-> end;
-> //
mysql> delimiter ;
2、打开游标
OPEN cur_name;
MySQL在处理OPEN语句时执行查询,存储检索出的数据以供浏览和滚动。
3、关闭游标
CLOSE cur_name;
CLOSE语句释放游标使用的所有内部内存和资源。
在一个游标关闭后,如果没有重新打开,则不能使用它。但是,使用声明过的游标不需要再次声明。
如果不明确关闭游标,MySQL将会在到达END语句时自动关闭它。
示例:
[sql]
view plaincopyprint?
mysql> delimiter //
mysql> create procedure test_cur()
-> begin
-> declare mycur cursor
-> for
-> select userid,username from newname;
-> open mycur;
-> close mycur;
-> end;
-> //
mysql> delimiter ;
4、使用游标数据
游标被打开后,可以使用FETCH语句分别访问它的每一行。
示例:
[sql]
view plaincopyprint?
mysql> delimiter //
mysql> create procedure test_cur()
-> begin
-> declare done boolean default 0;
-> declare cur_userid int;
-> declare cur_birthday varchar(50);
->
-> declare mycur cursor
-> for
-> select userid,year(birthday) from newname where birthday is not null;
-> declare continue handler for sqlstate '02000' set done=1;
->
-> open mycur;
->
-> repeat
-> fetch mycur into cur_userid,cur_birthday;
-> select cur_userid,cur_birthday;
-> until done end repeat;
->
-> close mycur;
-> end;
-> //
mysql> delimiter ;
mysql> call test_cur;
+------------+--------------+
| cur_userid | cur_birthday |
+------------+--------------+
| 19 | 1988 |
+------------+--------------+
1 row in set (0.00 sec)
+------------+--------------+
| cur_userid | cur_birthday |
+------------+--------------+
| 42 | 2008 |
+------------+--------------+
1 row in set (0.01 sec)
游标(CURSOR)是一个存储在MySQL服务器上的数据库查询,它不是一条SELECT语句,而是被该语句检索出来的结果集。在存储了游标之后,应用程序可以根据需要滚动或浏览其中的数据。
游标主要用于交互式应用,其中用户需要滚动屏幕上的数据,并对数据进行浏览或做出更改。
使用游标需要MySQL5及以上版本支持。
一、使用游标的步骤
在能够使用游标前,必须声明(定义)它。
一旦声明后,必须打开游标以供使用。
对于填有数据的游标,根据需要取出(检索)各行。
在结束游标使用时,必须关闭游标。
二、游标的基本操作
1、创建游标
DECLARE cur_name CURSOR FOR SELECT ****;
示例:
[sql]
view plaincopyprint?
mysql> delimiter //
mysql> create procedure test_cur()
-> begin
-> declare mycur cursor
-> for
-> select userid,username from newname;
-> end;
-> //
mysql> delimiter ;
mysql> delimiter // mysql> create procedure test_cur() -> begin -> declare mycur cursor -> for -> select userid,username from newname; -> end; -> // mysql> delimiter ;
2、打开游标
OPEN cur_name;
MySQL在处理OPEN语句时执行查询,存储检索出的数据以供浏览和滚动。
3、关闭游标
CLOSE cur_name;
CLOSE语句释放游标使用的所有内部内存和资源。
在一个游标关闭后,如果没有重新打开,则不能使用它。但是,使用声明过的游标不需要再次声明。
如果不明确关闭游标,MySQL将会在到达END语句时自动关闭它。
示例:
[sql]
view plaincopyprint?
mysql> delimiter //
mysql> create procedure test_cur()
-> begin
-> declare mycur cursor
-> for
-> select userid,username from newname;
-> open mycur;
-> close mycur;
-> end;
-> //
mysql> delimiter ;
mysql> delimiter // mysql> create procedure test_cur() -> begin -> declare mycur cursor -> for -> select userid,username from newname; -> open mycur; -> close mycur; -> end; -> // mysql> delimiter ;
4、使用游标数据
游标被打开后,可以使用FETCH语句分别访问它的每一行。
示例:
[sql]
view plaincopyprint?
mysql> delimiter //
mysql> create procedure test_cur()
-> begin
-> declare done boolean default 0;
-> declare cur_userid int;
-> declare cur_birthday varchar(50);
->
-> declare mycur cursor
-> for
-> select userid,year(birthday) from newname where birthday is not null;
-> declare continue handler for sqlstate '02000' set done=1;
->
-> open mycur;
->
-> repeat
-> fetch mycur into cur_userid,cur_birthday;
-> select cur_userid,cur_birthday;
-> until done end repeat;
->
-> close mycur;
-> end;
-> //
mysql> delimiter ;
mysql> call test_cur;
+------------+--------------+
| cur_userid | cur_birthday |
+------------+--------------+
| 19 | 1988 |
+------------+--------------+
1 row in set (0.00 sec)
+------------+--------------+
| cur_userid | cur_birthday |
+------------+--------------+
| 42 | 2008 |
+------------+--------------+
1 row in set (0.01 sec)
mysql> delimiter // mysql> create procedure test_cur() -> begin -> declare done boolean default 0; -> declare cur_userid int; -> declare cur_birthday varchar(50); -> -> declare mycur cursor -> for -> select userid,year(birthday) from newname where birthday is not null; -> declare continue handler for sqlstate '02000' set done=1; -> -> open mycur; -> -> repeat -> fetch mycur into cur_userid,cur_birthday; -> select cur_userid,cur_birthday; -> until done end repeat; -> -> close mycur; -> end; -> // mysql> delimiter ; mysql> call test_cur; +------------+--------------+ | cur_userid | cur_birthday | +------------+--------------+ | 19 | 1988 | +------------+--------------+ 1 row in set (0.00 sec) +------------+--------------+ | cur_userid | cur_birthday | +------------+--------------+ | 42 | 2008 | +------------+--------------+ 1 row in set (0.01 sec)
相关文章推荐
- MYSQL入门学习之十:视图的基本操作
- MYSQL入门学习之十三:自定义函数的基本操作
- Mysql入门学习笔记---基本操作
- MYSQL入门学习之九:索引的基本操作
- 【转】MYSQL入门学习之十:视图的基本操作
- 【转】MYSQL入门学习之八:数据库及表的基本操作
- 【MySQL入门篇】2.MySQL的基本操作--慕课网【学习总结】
- 【转】MYSQL入门学习之十三:自定义函数的基本操作
- MYSQL入门学习之十二:存储过程的基本操作
- MYSQL入门学习之一:基本操作
- MYSQL入门学习之十一:触发器的基本操作
- MYSQL入门学习之十五:事务处理的基本操作
- MYSQL入门学习之八:数据库及表的基本操作
- MYSQL入门学习之一:基本操作
- 【转】MYSQL入门学习之十一:触发器的基本操作
- 【转】MYSQL入门学习之一:基本操作
- 【转】MYSQL入门学习之十二:存储过程的基本操作
- sql分类及基本sql操作,校对规则(mysql学习笔记二)
- MySQL 5.6学习笔记(数据库基本操作,查看和修改表的存储引擎)
- linux学习入门5——linux文件基本操作(linuxcast.net)(复制、移动、重命名、创建、删除文件及文件夹)