Mysql使用存储过程和定时任务批量复制表数据到另一个表

存储过程介绍
mysql从5.0开始提供存储过程功能,存储过程就是在数据库内部执行的函数方法,外部程序可直接调用数据库内部的存储过程,从而实现对数据库内部数据和逻辑的保密。
日常系统都会定时对一些表做删除和备份,这里也可以使用存储过程来实现。

这里我们实现一个可以把数据库中表A的数据在每天的指定时间使用mysql定时任务备份到表B中

mysql存储过程实现
存储过程实现把表A数据使用游标批量导入到表B中,由于频繁的COMMIT会引起大量Redo Log的物理I/O,会极大的限制数据库的性能。所以为了提升导入数据性能,存储过程每10000笔commit数据1次

DELIMITER $$
create PROCEDURE backAtoB()
BEGIN
-- 创建变量用来接收游标数据  变量的声明、游标的声明和HANDLER声明的顺序不能乱,必须是先声明变量,再申明游标,最后声明HANDLER
-- 变量的定义不要和你的select的列的键同名!否则fetch into 会失败
 DECLARE v_id INT DEFAULT 0;
 DECLARE v_name VARCHAR(100) DEFAULT '';
 DECLARE v_creattime DATETIME DEFAULT NULL;
 DECLARE v_count INT DEFAULT 0;
 DECLARE done INT DEFAULT 0;
-- 创建游标
 DECLARE rs_cursor CURSOR FOR
 	SELECT id,name,creattime FROM tbla WHERE creattime<DATE(NOW());
 -- 指定游标循环结束时的返回值 ,在游标循环到最后会将 done 设置为 1
 DECLARE 
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值