mysql存储过程 使用游标实现两张表数据同步数据
Posted 健康平安的活着
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql存储过程 使用游标实现两张表数据同步数据相关的知识,希望对你有一定的参考价值。
一 存储过程中的游标
1.1 游标的功能概述
游标就是类似java中集合遍历的迭代器,mysql中的游标只能用在存储过程和函数中,在存储过程和函数中可以使用游标对结果集进行循环的处理,可以遍历返回的多行结果,每次拿到一整行数据。
1.2 游标的语法使用
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;
二 实操案例
2.1 定义一张表以及铺底一些数据
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();
效果:
以上是关于mysql存储过程 使用游标实现两张表数据同步数据的主要内容,如果未能解决你的问题,请参考以下文章