MySQL中怎么使用游标
这篇文章主要介绍了MySQL中怎么使用游标,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
要明白什么是游标,首先要了解存储过程,存储过程是事先经过编译并且存储在数据库中的一段SQL语句,他可以接受参数,也可以在其中使用IF
语句、设置变量、循环等,比如下面语句用于创建一个存储过程。【相关推荐:mysql视频教程】
delimiter$$createprocedureselect_all()beginselect*fromuser;end;$$
调用存储过程。
mysql>callselect_all;$$
存储过程可以减少数据库和应用服务器之间的传输,对提供数据库处理效率还是有好处的,而游标(Cursor)有的地方又叫光标,可以在存储过程中,对结果集进行循环处理,但是目前,MySQL只允许我们从SELECT
语句从头到尾获取结果集中的每一行,无法从最后一行获取到第一行,也无法直接跳转到结果集中的指定行。
使用游标有以下几个步骤。
1、游标定义
DECLAREcursor_nameCURSORFORselect_statement
2、打开游标
OPENcursor_name;
3、获取游标中的数据
FETCHcursor_nameINTOvar_name[,var_name]...
4、关闭光标
CLOSEcursor_name;
5、释放光标
DEALLOCATEcursor_name;实例
创建表
CREATETABLEcursor_table(idINT,nameVARCHAR(10),ageINT)ENGINE=innoDBDEFAULTCHARSET=utf8;insertintocursor_tablevalues(1,'张三',500);insertintocursor_tablevalues(2,'李四',200);insertintocursor_tablevalues(3,'王五',100);insertintocursor_tablevalues(4,'老六',20);createtablecursor_table_user(namevarchar(10));
下面我们通过游标,遍历cursor_table表,把年龄大于30的人名存放到cursor_table_user
dropproceduregetTotal;deletefromcursor_table_user;CREATEPROCEDUREgetTotal()BEGINDECLAREtotalINT;DECLAREsidINT;DECLAREsnameVARCHAR(10);DECLAREsageINT;DECLAREdoneINTDEFAULTfalse;DECLAREcurCURSORFORSELECTid,name,agefromcursor_tablewhereage>30;DECLARECONTINUEHANDLERFORNOTFOUNDSETdone=true;SETtotal=0;OPENcur;FETCHcurINTOsid,sname,sage;WHILE(NOTdone)DOinsertcursor_table_uservalues(sname);SETtotal=total+1;FETCHcurINTOsid,sname,sage;ENDWHILE;CLOSEcur;SELECTtotal;END
callgetTotal();mysql>select*fromcursor_table_user;+--------+|name|+--------+|张三||李四||王五|+--------+3rowsinset(0.00sec)
这段程序有一行非常重要,DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true;
,他表示如果游标或SELECT语句没有数据的时候,将done
变量的值设置 为 true,用来退出循环。
感谢你能够认真阅读完这篇文章,希望小编分享的“MySQL中怎么使用游标”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。