本文实例讲述了mysql游标概念与用法。分享给大家供大家参考,具体如下:

1、游标的概念(cursor)

一条sql,对应n条资源,取出资源的接口,就是游标,沿着游标,可以一次取出1行。如果开发过安卓的同学应该知道有一个api是cursor,也是读取sqlite数据库用的,和这个有点类似。

2、使用游标的步骤

(1)声明

使用declare进行声明

(2)打开游标

使用open进行打开

(3)从游标中取值

使用fetch进行取值

(4)关闭游标

使用close关闭游标

3、创建一个简单的游标

需求:从商品表中读取第一行数据

商品表(goods)数据:

注意:我这里已经将mysql的结束标识符改为 $,如果要知道怎么设置为$,请参考前面一篇文章:mysql触发器。

定义:

输出结果:

4、多次取值操作

输出:

注意:当游标读到末尾,如果继续进行取值操作会发生报错

5、游标循环表中的所有数据

(1)使用计数器来循环

输出结果:

(2)使用越界标志来控制循环

在mysql cursor中,可以声明declare continue handler来操作1个越界标志

语法:

使用:

输出结果:

注意:这里发生了错误,这里输出了4行数据,而表中只有3行数据,而且还爆出了警告,后面会说怎么结果这个问题。

程序执行逻辑:

循环游标->fetch第三条数据->显示->fetch第四条数据->没有数据->设置have=0操作->执行continue handler->程序不退出,执行显示操作->还是显示第三条数据

6、continue和exit的区别

continue:若没有数据返回,程序继续,并将变量is_found设为0,这种情况是出现在select xx into xxx from tablename的时候发生的。

exit:若没有数据返回,退出程序,并将变量is_found设为0,这种情况是出现在select xx into xxx from tablename的时候发生的。

使用exit来替换continue:

使用exit就不会出现上面的那种情况了,程序执行逻辑:

循环游标->fetch到第三条数据->显示->第四次fetch操作->没有数据->设置 have=0操作->程序直接退出exit

所以就没有显示出第四条数据。

输出结果:

7、正确的游标循环

在一些特殊的情况中,我们可以读到的数据为空,或者压根sql语句就有错误,我们不能避免出现这种情况,所以我们要正确的使用游标循环操作。

首先应该创建游标,然后打开游标后,应先手动进行fetch操作获取到一行数据,然后再通过循环,在循环里先做处理内容,后进行fetch操作。这样如果在手动获取数据的期间就没有获得到数据的话,就会执行have = 0,如果是repeat循环,然后进入repeat循环,先输出null数据,最后又进行获取,这样运行到until时就会退出循环;如果是while循环,压根就不进去while循环里,就不会有任何1行输出。

(1)repeat循环:

输出结果:

(2)while循环:

输出结果:

希望本文所述对大家MySQL数据库计有所帮助。

原文链接:https://blog.csdn.net/baochao95/article/details/53239463

mysql 创建游标报错,MySQL游标概念与用法详解相关推荐

  1. mysql创建用户报错ERROR 1290

    使用navicat 给mysql创建用户报错ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv op ...

  2. mysql登录报错error1045,mysql创建登录报错ERROR1045(28000)

    .如下图(第四个): 而本人创建的用户为: Mysql> grant  all  on  itcase.*  to  'test'@'%'  identified  by  '123456'; ...

  3. python装饰器详解-Python装饰器基础概念与用法详解

    本文实例讲述了Python装饰器基础概念与用法.分享给大家供大家参考,具体如下: 装饰器基础 前面快速介绍了装饰器的语法,在这里,我们将深入装饰器内部工作机制,更详细更系统地介绍装饰器的内容,并学习自 ...

  4. mysql identity sql_SQL Server中identity(自增)的用法详解

    一.identity的基本用法 1.含义 identity表示该字段的值会自动更新,不需要我们维护,通常情况下我们不可以直接给identity修饰的字符赋值,否则编译时会报错 2.语法 列名 数据类型 ...

  5. mysql游标_MySQL游标概念与用法详解

    本文实例讲述了MySQL游标概念与用法.分享给大家供大家参考,具体如下: 1.游标的概念(Cursor) 一条sql,对应N条资源,取出资源的接口,就是游标,沿着游标,可以一次取出1行.如果开发过安卓 ...

  6. ubuntu 找不到mysql.h_ubuntu安装了mysql 但是编译报错 mysql.h: No such file or directory

    在Ubuntu体系中,已经安装了mysql,即应用sudo apt-get install mysql-server mysql-client 但是用C编译mysql数据库时,报错 fatal err ...

  7. mysql封装执行_解决Mysql封装类执行报错——Mysql::insert() should not be called

    今天在写程序的时候使用了别的程序员写的一个Mysql封装类,但是执行后php会报错:Strict standards: Non-static method Mysql::insert() should ...

  8. mysql uroot p 报错,MySQL链接错误集。

    一. 链接MySQL数据库报错: ERROR 1049 (42000):unknown database ';' C:\Program Files\mysql-5.6.22-winx64\bin> ...

  9. mysql decimal长度_mysql decimal类型与decimal长度用法详解

    以下内容转自:http://blog.csdn.net/zhanghao143lina/article/details/53816884 三者的区别介绍 float:浮点型,含字节数为4,32bit, ...

最新文章

  1. 一款超炫酷后台权限管理系统
  2. Error creating bean with name 'adminUserController': Injection of autowired dependencies failed;
  3. oracle数据库时分秒格式_Oracle如何输出指定格式的日期时间数据呢?
  4. POSIX 信号量学习与思考
  5. 原生js写小球向右移动移动一定距离停止运动及小球加速运动
  6. 关于filenet中的folder以及document简单操作
  7. python删除word表格中的某一行_python-docx添加和删除表格行、列
  8. 3 个主流 Java 微服务框架,各有特色
  9. VBA学习笔记6:将多个工作表中满足条件的数据汇总到同一个工作表
  10. 5.3 使用数据结构对真实世界建模
  11. 自学Python+Selenium自动化测试
  12. 访问网站时浏览器报The requested URL ‘/‘ was not found on this server.
  13. 打造一款可靠的WAF(Web应用防火墙)
  14. 范数、损失函数、标准差
  15. mysql更改数据库登录密码失败;Access denied for user 'root'@'localhost;mysqladmin: connect to server at 'localhos
  16. java学习笔记(8) 第8章(下)- 面向对象编程(中级部分) - 练习题
  17. 二人成团,阿里云服务器拼团活动开启
  18. 重磅!iPhone 13 型号曝光
  19. 智能手表的机遇与挑战
  20. win10计算机怎么连接网络,如何创建宽带连接_win10电脑宽带连接怎么创建 - 驱动管家...

热门文章

  1. Linux 临时获取root权限
  2. 订单列表三种状态切换时请求数据
  3. python简单的画图代码爱心,怎么用python代码画心
  4. 西门子PLC沿脉冲类指令汇总
  5. android返回键webview返回,Android WebView 物理返回键遇到重定向处理
  6. 听说·你在两个世界徘徊|黑客六道
  7. 避免内卷化,互联网程序员必掌握的架构设计模式
  8. 网吧电脑怎么录屏?分享3种便捷方法,一键录屏
  9. springboot网络招聘服务系统毕业设计源码121727
  10. 兼容ie浏览器的经验总结