经常需要定期对某些表删除历史数据,通常这样的表的数据又是非常巨大,为了减轻对线上环境的影响,删除时必须分成小批量来进行。
以前分享过SQLServer的版本。
下面是MySQL版本:
1 delimiter $$ 2 drop procedure if exists proc_delete_old_data; 3 create procedure proc_delete_old_data() 4 begin 5 lp : loop 6 delete from mytable where createdtime <= date_sub(curdate(),interval 1 month) limit 5000; 7 if row_count() < 5000 then 8 leave lp; 9 end if; 10 select sleep(1); 11 end loop; 12 end $$ 13 14 delimiter ; 15 set binlog_format = STATEMENT; 16 call proc_delete_old_data;