mysql 存储过程及游标使用,
因为数据表的数据量太大,每天定时执行分表的存储过程,时间长了分表数量过多,需要定期删除分表,先创建存储过程,之后设置定时事件去执行存储过程
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