MySQL数据库学习--数据库游标的简单实现

一、前言

寒假接触到了数据库游标的概念,一直没有实现。昨日回头看了一下,今早给实现了。

二、数据库游标的优势

自己百度、谷歌去吧。

三、MySQL语法实现

3.1游标的使用详情

a.声明游标

DECLARE cursor_name CURSOR FOR select_statement

这个语句声明一个游标。也可以在子程序中定义多个游标,但是一个块中的每一个游标必须有唯一的名字。声明游标后也是单条操作的,但是不能用SELECT语句不能有INTO子句。

b.游标OPEN语句

OPEN cursor_name

这个语句打开先前声明的游标。

c.游标FETCH语句

FETCH cursor_name INTO var_name [, var_name] …

这个语句用指定的打开游标读取下一行(如果有下一行的话),并且前进游标指针。

d.游标CLOSE语句

CLOSE cursor_name

这个语句关闭先前打开的游标。

3.2代码实现

1.创建测试数据库、数据表

CREATE TABLE `users` (  
 `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,  
 `user_name` varchar(60) NOT NULL DEFAULT '',  
 `user_pass` varchar(64) NOT NULL DEFAULT '',  
 PRIMARY KEY (`ID`)  
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8  

2.创建游标

将该内容存于一个.sql文件中,比如我将该内容存到了myCursorTest.sql文件中。

 use test; /*选择使用已经创建好的数据库test*/
 delimiter |  /*使用delimiter告诉数据库该处需要多条SQL命令解析*/
 create procedure test_cursor (in param int(10),out result varchar(90))    /*创建存储过程*/
 begin  /*开始*/
     declare name varchar(20);  /*声明变量*/
     declare pass varchar(20);  
     declare done int;  
     declare cur_test CURSOR for select user_name,user_pass from users;  /*声明游标*/
     declare continue handler FOR SQLSTATE '02000' SET done = 1;  
     if param then  /*开始循环调用*/
         select concat_ws(',',user_name,user_pass) into result from test.users where id=param;  
     else  
         open cur_test;  
         repeat  
             fetch cur_test into name, pass;  
             select concat_ws(',',result,name,pass) into result;  
         until done end repeat;  
         close cur_test;  
     end if;  /*结束循环*/
 end;
 |/*终结*/

3.调用游标

a.在该myCursorTest.sql文件所在的目录下使用命令使文件生效;

mysql -u root -p < myCursorTest.sql

b.调用游标;

call test_cursor(10,@test);/注意参数/

c.显示游标取到的结果集。

select @test;

4.删除游标

使用命令删除游标:

drop procedure test_cursor;

3.3截图参考

1.创建测试游标
MySQL数据库学习--数据库游标的简单实现_第1张图片
2.调用游标及结果
MySQL数据库学习--数据库游标的简单实现_第2张图片

四、参考材料

http://blog.51yip.com/mysql/1281.html
http://blog.csdn.net/u011704894/article/details/51223010

你可能感兴趣的:(mySQL,游标)