【问题标题】:How to delete a MySQL record after a certain time如何在一定时间后删除 MySQL 记录
【发布时间】:2018-05-25 22:04:40
【问题描述】:

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

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

日期是普通格式的时间戳; 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;
$$;

【问题讨论】:

    标签: mysql


    【解决方案1】:

    你可以试试这个条件:

    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 变通方法,与您的系统顺利集成。

    【讨论】:

    • 感谢您的输入 Jordan,我的问题是我对 Cron 脚本一无所知。但我确实意识到事件在 MySQL 线程上运行可能是一个轻微的缺点
    【解决方案2】:

    这应该可以解决问题。

    DELETE FROM messages WHERE date < (CURDATE() - INTERVAL 7 DAY);
    

    【讨论】:

      【解决方案3】:

      对于那些使用共享主机(例如 1and1 的主机)并且无法创建活动的人,另一种方法是使用 webcron

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-18
        • 2012-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-19
        相关资源
        最近更新 更多