mysql定期删除分表

本文介绍了一种通过存储过程自动删除超过30天的分表的方法,以解决因数据量过大导致的分表数量过多问题。通过创建存储过程sp_droptables并设置事件E_DROPTABLES每天执行,可以定期清理过期分表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为数据表的数据量太大,每天定时执行分表的存储过程,时间长了分表数量过多,需要定期删除分表

CREATE  PROCEDURE `sp_droptables`()
begin
	declare t_name varchar(64) ;
            declare isFinished int default false;
            declare log_table_list cursor for (select table_name from INFORMATION_SCHEMA.TABLES  where TABLE_SCHEMA='库名' and TABLE_NAME like 'table_%') ;
            declare continue handler for not found set isFinished=true; 
            open log_table_list;
            repeat 
                fetch log_table_list into t_name; 
                if isFinished = false then
                    if datediff(now(),DATE_FORMAT(replace(t_name,'table_',''),'%Y-%m-%d') )>30 										then
                        set @sqltext=concat('drop table ',t_name,';');
                        PREPARE drop_table from @sqltext;
                        execute drop_table ; 
                    end if;
                end if;
                until isFinished 
            end repeat; 
            close log_table_list;
end

创建存储过程,每天定时执行这个存储过程就行了 

DROP EVENT IF EXISTS `E_DROPTABLES`;
CREATE  EVENT `E_DROPTABLES`
ON SCHEDULE
EVERY '1' DAY STARTS '2019-12-26 03:00:00'
ON COMPLETION PRESERVE
DO BEGIN
CALL sp_droptables;
END

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值