我有一个数据库,其中每小时定期填充表。现在数据量增长了很多。我只希望存储 10 天的数据。每天过去后,所有其余部分都会自动删除。
我怎么能在mysql中做到这一点?
多种选择..
写一个cron job
来做这件事。(使用 PHP/ASP/JSP——无论你在使用什么)
Event
在mysql中安排一个
CREATE EVENT `event_name`
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
DO BEGIN
DELETE * FROM tablename WHERE date < CURRENT_DATE - INTERVAL 10 DAY
END;
欲了解更多信息,请访问http://www.sitepoint.com/how-to-create-mysql-events/
否则有trigger
INSERT 并相应地删除记录(这里的问题是所有插入触发器都会被调用)。
CREATE EVENT 'eventname' ON
SCHEDULE EVERY 24 HOUR STARTS '2013-01-09 10:00:00'
ON COMPLETION NOT PRESERVE ENABLE
COMMENT 'Clears out old data table each day.'
DO
delete * from tablename WHERE fieldwithdateofinput < CURRENT_DATE - INTERVAL 10 DAY
这将使事件每 24 小时触发一次,从日期 2013-01-09 10:00:00 开始,假设您有一个记录输入时具有注册日期的字段(fieldwithdateofinput)。
您有 2 个选项。
1.事件调度器
首先创建表并创建事件以对删除 3 周前的记录执行删除查询。
CREATE EVENT `ex1` ON SCHEDULE
EVERY 1 DAY
ON COMPLETION NOT PRESERVE
ENABLE
COMMENT ''
DO BEGIN
DELETE FROM table WHERE DATEDIFF(NOW(),TimeStampColumn) > 10
END
//for 3 weeks
注意:旧版本的 mysql 没有事件调度器
2.创建cron作业
文件 1.sql
DELETE FROM table WHERE DATEDIFF(NOW(),TimeStampColumn) > 10
安排这个命令:
mysql -uusername -ppassword < /path/to/file1.sql