游标就是类似java中集合遍历的迭代器,MySQL中的游标只能用在存储过程和函数中,在存储过程和函数中可以使用游标对结果集进行循环的处理,可以遍历返回的多行结果,每次拿到一整行数据。
1.创建游标
DECLARE 游标名称 CURSOR FOR 查询sql语句; 如
declare stu_data_List cursor for select * from tb_stu where create_time>='2022-07-27 10:00:00';
2.打开游标
OPEN 游标名称; 如 open stu_data_List;
3.遍历使用游标获取数据
FETCH 游标名称 INTO 变量名1,变量名2,...; 如 fetch stu_data_List into id,u_name,u_age,create_date;
4.关闭游标
CLOSE 游标名称; 如 close stu_data_List;
CREATE TABLE `tb_stu` (
`id` int(10) NOT NULL COMMENT '用户id',
`u_name` varchar(255) DEFAULT NULL COMMENT '用户名',
`u_age` int(10) DEFAULT NULL COMMENT '年龄',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
新增一些数据

3.编写存储过程:实现从tb_stu查询指定日期范围的数据迁移到tb_stu2 这张表中
- drop PROCEDURE IF EXISTS p_sync_stu;
- CREATE PROCEDURE p_sync_stu()
- begin
- -- 需要定义接收游标数据的变量
- declare id int(10);
- declare u_name varchar(255);
- declare u_age int(10);
- declare create_date TIMESTAMP;
- declare flag int default 0; -- 定义标记变量
- -- 创建游标,查询学生信息数据
- declare stu_data_List cursor for select * from tb_stu where create_time>='2022-07-27 10:00:00';
- -- 游标结束后,将标记量改为1
- declare exit handler for not found set flag=1;
- -- 开启游标
- open stu_data_List;
- -- 循环遍历游标
- repeat
- -- 使用游标,遍历结果数据
- fetch stu_data_List into id,u_name,u_age,create_date;
- -- 将数据保存到表中
- insert into tb_stu2 values(id,u_name,u_age,create_date);
- until flag=1
- end repeat;
- -- 关闭游标
- close stu_data_List;
- end
执行
call p_sync_stu();
效果:
