20

我想在 7 天后从我的 MySQL 数据库中删除一些消息。

我的消息表行具有以下格式:id | 留言 | 日期

日期是正常格式的时间戳;2012-12-29 17:14:53

我在想一个 MySQL 事件将是要走的路,而不是一个 cron 工作。

我想对于有经验的 SQL 人员来说这是一个简单的问题,我如何在下面的括号中对删除消息部分进行编码?

一个例子将不胜感激,谢谢。

 DELIMITER $$
   CREATE EVENT delete_event
   ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY
   ON COMPLETION PRESERVE
  DO
    BEGIN
      DELETE messages WHERE date >= (the current date - 7 days);
    END;
$$;
4

3 回答 3

25

您可以尝试使用此条件:

WHERE date < DATE_SUB(NOW(), INTERVAL 7 DAY)

使整个 SQL 脚本看起来像这样:

CREATE EVENT delete_event
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY
ON COMPLETION PRESERVE

DO BEGIN
      DELETE messages WHERE date < DATE_SUB(NOW(), INTERVAL 7 DAY);
END;

但是,在您的位置上,我将使用简单的 cron 脚本解决给定的问题。这样做的原因很简单:更容易维护代码,没有丑陋的 SQL 变通方法,与您的系统顺利集成。

于 2012-12-31T01:24:22.307 回答
10

这应该可以解决问题。

DELETE FROM messages WHERE date < (CURDATE() - INTERVAL 7 DAY);
于 2012-12-31T01:21:08.260 回答
2

对于那些在共享主机上的人,比如 1and1,并且不能创建事件,另一种方法是使用webcron

你只需要告诉 webcron 你想运行的 php 脚本的 url,他们会在你想要的时间间隔为你触发它

于 2014-04-15T14:29:55.140 回答