1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > mysql利用存储过程删除数据库历史的过期数据

mysql利用存储过程删除数据库历史的过期数据

时间:2024-02-20 14:43:29

相关推荐

mysql利用存储过程删除数据库历史的过期数据

最近遇到老板一个任务,要求我删除我们生产数据库产生的流水表的历史的数据,总共大约有2千万条数据。由于流水表正在使用,如果直接删除2千万条这么多的数据会造成卡死,甚至锁表,影响业务。我也考虑过新建一个表,把要保留的数据导入新表,然后再删除旧表,但是由于这个表正在使用,所以这个方案不太合适。后来就查找资料,想到用存储过程的方式,创建一个存储过程,每次删除1万条数据,每次删除都sleep 5秒的时间,这样数据库不会有太大的压力,不会造成锁表。

我决定采用存储过程的方式去删除,在mysql命令行执行,过程如下:

delimiter $$DROP PROCEDURE IF EXISTS proc_batch_delete;CREATE PROCEDURE proc_batch_delete()BEGINDECLARE tcount BIGINT;#这步骤是将要删除的历史数据行数保存在变量tcount中SELECT COUNT(0) INTO tcount FROM t_test WHERE 'Date' <= '1231';SELECT tcountWHILE tcount>0 DO#每次删1万条DELETE FROM t_test WHERE 'Date' <= '1231' LIMIT 10000;#每次删完tcount减去10000SET tcount=tcount-10000commit;#为防止锁表,睡眠5秒SELECT sleep(5);SELECT tcount;END WHILE;END $$delimiter ;#调用存储过程CALL proc_batch_delete;

这样写,每次删完都会输出还剩多少行,比较直观清楚

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。