欢迎来到MySQL实战第49篇,修炼500篇,只是给自己一个说明。
【游标的设计思想】
游标是用来存放sql语句执行的记过。它的作用就是用于查询数据库所返回的记录进行遍历,以便进行相应的操作。
【游标的三个属性】
<1>不滚动:游标只能想一个方向前进,不可以跳过任何一行数据。
<2>只读
<3>不敏感:数据库可以选择不复制结果集
【游标的使用场景】
MySQL数据库中,可以在事件,函数,触发器,存储过程中使用游标。
【游标的优缺点】
<1>游标的优点是面向集合与面向行的设计思想之间的一种桥梁,它是对行操作的,对从数据库中select查询结果得到的结果集的每一行可以进行分开的独立的相同或不同的操作。
<2>游标的缺点是性能不高,只能一行一行操作。
【游标的操作命令】
<1>游标的定义
declare 游标的名称 cursor for 查询集合;
<2>打开游标
open 游标名称;
<3>取游标的中数据
fetch 游标名称 into 字段名1[,字段名2...];
<4>关闭游标
close 游标名称;
<5>释放游标
deallocate 游标名称;
【实践操作】
<1>创建表
CREATE TABLE cursor_table ( id INT , name VARCHAR(10), age INT )ENGINE=innoDB DEFAULT CHARSET=utf8; insert into cursor_table values(1, '孙悟空', 500); insert into cursor_table values(2, '猪八戒', 200); insert into cursor_table values(3, '沙悟净', 100); insert into cursor_table values(4, '唐僧', 20);
<2>查看表结构和数据
<3>loop方式使用游标创建一个存储过程,统计你年龄大于30的记录的数量。
delimiter //
create procedure gettotal()
begin
declare total int;
-- 创建接收游标数据的变量
declare sid int;
declare sname varchar(10);
-- 创建总数变量
declare sage int;
-- 创建结束标志变量
declare done int default false;
-- 创建游标
declare cur cursor for select id,name,age from cursor_table where age>30;
-- 指定游戏循环结束时的返回值
declare continue handler for not found set done=true;
-- 设置初始值
set sage=0;
set total=0;
-- 打开游标
open cur;
-- 开始循环游标里的数据
read_loop:loop
-- 根据游标当前指向的一条数据
fetch cur into sid,sname,sage;
-- 判断游标的循环是否结束
if done then
leave read_loop;
end if;
-- 获取一条数据时,将count值进行累加操作,这里可以做任意你想要做的操作。
set total=total+1;
-- 结束游标操作
end loop;
-- 关闭游标
close cur;
-- 输出结果
select total;
end
//
<4>调用存储函数
call gettotal();
关注财务总监的数据分析,修炼MySQL,让自己更自信!