mysql游标的原理与用法实例分析

这篇文章主要介绍了mysql游标的原理与用法,结合实例形式分析了mysql游标的概念、原理、用法及操作注意事项,需要的朋友可以参考下

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

本文内容:

  • 什么是游标
  • 创建游标
  • 使用游标

首发日期:2018-04-18


什么是游标:

  • 如果你前面看过mysql函数,会发现无法使用返回多行结果的语句。但如果你又确实想要使用时,就需要使用到游标,游标可以帮你选择出某个结果(这样就可以做到返回单个结果)。
  • 另外,使用游标也可以轻易的取出在检索出来的行中前进或后退一行或多行的结果。
  • 游标可以遍历返回的多行结果。

补充:

  • Mysql中游标只适用于存储过程以及函数。

创建游标:

  • 语法:

    • 1.定义游标:declare 游标名 cursor for select语句;
    • 2.打开游标:open 游标名;
    • 获取结果:fetch 游标名 into 变量名[,变量名];
    • 关闭游标:close 游标名;

      ?

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      create procedure p1()

      begin

      declare id int;

      declare name varchar(15);

      — 声明游标

      declare mc cursor for select * from class;

      — 打开游标

      open mc;

      — 获取结果

      fetch mc into id,name;

      — 这里是为了显示获取结果

      select id,name;

      — 关闭游标

      close mc;

      end;

    ?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    create procedure p2()

    begin

    declare id int;

    declare name varchar(15);

    — 声明游标

    declare mc cursor for select * from class;

    — 打开游标

    open mc;

    — 获取结果

    loop — 循环,将表的内容都转移到class2中

    fetch mc into id,name;

    — 这里是为了显示获取结果

    insert into class2 values(id,name);

    — 关闭游标

    end loop;

    close mc;

    end;


使用游标:

  • 游标每一次fetch都是获取一行结果,可以使用变量来获取fetch到的每一列的值

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

create procedure p2()

begin

declare id int;

declare name varchar(15);

— 声明游标

declare mc cursor for select * from class;

— 打开游标

open mc;

— 获取结果

loop — 循环,将表的内容都转移到class2中

fetch mc into id,name;

— 这里是为了显示获取结果

insert into class2 values(id,name);

— 关闭游标

end loop;

close mc;

end;

上面的代码会有一个报错mysql游标的原理与用法实例分析,不断循环的话,始终会达到表的末尾,到了末尾就无法继续fetch,一般来说都要避免报错,到了末尾前会有一个mysql定义的

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

create procedure p3()

begin

declare id int;

declare name varchar(15);

declare flag int default 0;

— 声明游标

declare mc cursor for select * from class;

declare continue handler for not found set flag = 1;

— 打开游标

open mc;

— 获取结果

l2:loop

fetch mc into id,name;

if flag=1 then — 当无法fetch会触发handler continue

leave l2;

end if;

— 这里是为了显示获取结果

insert into class2 values(id,name);

— 关闭游标

end loop;

close mc;

end;

call p3();– 不报错

select * from class2;

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

原文链接:https://www.cnblogs.com/progor/p/8875100.html

版权声明:本文(即:原文链接:https://www.qin1qin.com/catagory/12772/)内容由互联网用户自发投稿贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 630367839@qq.com 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年 8月 17日 11:13:48
下一篇 2022年 8月 17日 11:13:58

软件定制开发公司

相关阅读

发表回复

登录后才能评论
通知:禁止投稿所有关于虚拟货币,币圈类相关文章,发现立即永久封锁账户ID!