— 大表数据迁移,每天凌晨1点到5点执行,执行间隔时间10分钟,迁移旧数据到历史表。
DELIMITER $$ USE `dbx`$$ DROP PROCEDURE IF EXISTS `pro_xx`$$ CREATE PROCEDURE `pro_xx`() BEGIN DECLARE p_oalid INT default 0; DECLARE STOP INT DEFAULT 0; DECLARE cur_oalid CURSOR FOR SELECToal.id FROM oal_xxx oal WHERE oal.`ymd` <concat><p> </p> <p><span style="color:#0070c0"> -- </span><span style="color:#0070c0">读取一行数据到变量</span><span style="color:#0070c0"> </span></p> <pre class="brush:php;toolbar:false">FETCH cur_oalid INTO p_oalid;
— 这个就是判断是否游标已经到达了最后
WHILE STOP 1 DO -- select p_id; START TRANSACTION;
— 进行数据迁移
REPLACE INTO oal_xxx_history SELECT oal.*FROM oal_xxx oal WHERE oal.id=p_oalid ; DELETE FROM oal_xxx WHERE id=p_oalid; -- INSERT INTO t (tid) VALUES (p_tid); COMMIT;
— 读取下一行的数据
FETCH cur_oalid INTO p_oalid; END WHILE; CLOSE cur_oalid; -- 关闭游标 END$$ DELIMITER ;
以上就是MySQL存储过程–>通过游标遍历和异常处理迁移数据到历史表 的内容,更多相关内容请关注PHP中文网(www.php.cn)!
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END