存储过程介绍
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