日期过期时自动删除表中的记录?

时间:2013-08-12 07:19:27

标签: php mysql

我想知道如何在日期过期时自动删除记录,我正在创建一个机票预订网站。我需要从我的mysql数据库中删除所有过期的航班详细信息。我在某处读到了我可以使用cron但我不知道该怎么做。任何脚本帮助都会非常有用。

6 个答案:

答案 0 :(得分:11)

您可以尝试使用MySQL Events

CREATE EVENT IF NOT EXISTS `dbName`.`eventName`
ON SCHEDULE
    EVERY 1 DAY // or 1 HOUR
COMMENT 'Description'
DO
    BEGIN

    DELETE FROM `dbName`.`TableName` WHERE `DateCol` < NOW();

    END

注意需要在您的服务器上启用MySQL Event Scheduler

SET GLOBAL event_scheduler = ON;

更多信息here

答案 1 :(得分:1)

删除记录不是一个好主意,我建议你在Details表中添加ActiveFrom和ActiveTo DateTime列,然后不要在前端显示过期的记录。

答案 2 :(得分:0)

您需要该服务来检查过期记录并定期删除。您应该使用此SQL:

DELETE YourTable WHERE RecordDate&lt; @Expiration

答案 3 :(得分:0)

Cron最适合您的情况。

  • 创建删除或标记不需要的航班的php文件,该脚本将只连接到数据库,执行查询,并可能输出短暂的成功/失败消息。
  • 设置每隔X小时执行该php脚本的cron作业或任何您想要的内容。

如果您使用的是CPanel,则可以设置cron job from it

答案 4 :(得分:0)

使用 CRON 作业。看看下面的表示。

Minutes [0-59]  
|   Hours [0-23]  
|   |   Days [1-31]  
|   |   |   Months [1-12]  
|   |   |   |   Days of the Week [Numeric, 0-6]  
|   |   |   |   |  
*   *   *   *   * home/path/to/command/the_command.sh 

如果你想安排一个任务在每个星期六上午8:30运行,它很可能看起来像这样。

30 8 * * 6 home/path/to/command/the_command.sh  

只需使用您的设置,您最终会得到它。

答案 5 :(得分:0)

如果您的表当前只有2个字段,则需要添加一个时间戳记字段(默认值为CURRENT_TIMESTAMP),以便能够知道何时添加了行。

然后您可以运行以下MySQL查询...

DELETE FROM `table` WHERE `timestamp` &gt; DATE_SUB(NOW(), INTERVAL 10 MINUTE)

; 不过,您将需要将其作为cron运行。

据我所知,这不能仅在MySQL中完成。