日期:2014-05-16  浏览次数:20649 次

mysql自动删除表的问题
在mysql中建了很多表,表名包含日期(例如:20111205),如何将超过10天(即10天之前)的表全部删除掉?

------解决方案--------------------
自己写个存储过程可以实现。
------解决方案--------------------
只能用存储过程或者你自己的程序来实现。

在你自己的程序中,则可以 show tables like 'xxx%'; 得到相应表名,然后再进行 drop 这些表。

存储过程中的话,则可以通过 select TABLE_NAME from INFORMATION_SCHEMA.TABLES where ... 得到表名,然后构成相应"DROP TABLE XX"的字符串, 再用PREPARE, EXECUTE执行这个字符串中的SQL语句。
------解决方案--------------------
然后每天凌晨crontab调用
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_droptable_errorlog`()
BEGIN
set @sql = concat('drop table errorlog_',date_format(date_add(now(),interval -10 day),'%Y%m%d'));
 prepare stmt from @sql;
execute stmt;
end
------解决方案--------------------
写个存储过程删除表,写个数据库event每天执行这个存储过程