将数据添加到数据库,在一定时间后自动删除?

时间:2015-08-11 09:09:31

标签: php mysql database mysqli timer

所以,我已经在这个主题上做了很多谷歌搜索,我找不到答案。所以,基本上,我正在寻找一个小网站,它将从HTML表单中提取信息,将其发送到数据库,然后两小时后,它将自动删除自己。我有一个关于它如何工作的基本理论,但我无法弄清楚如何做到这一点:我可以拉出当前的时间和日期,再增加两个小时,然后将时间放入“过期”栏中。数据库。一旦时间是expires列中的时间,数据将从数据库中删除。很抱歉,如果这是一个非常“noobish”的问题,我对使用PHP的数据库仍然有点新意。

无论如何,任何帮助将不胜感激!谢谢!

4 个答案:

答案 0 :(得分:4)

您可以向表中添加一个新的时间戳列,它会自动添加创建行的时间戳,如此

CREATE TABLE t1 (
   #your existing columns defined as before + this new column
   ts_created TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

现在,每次在此表上创建一行时,MySQL都会在创建时完成所有记录工作。

假设您可能无法在主机上创建cron作业,则可以在现有站点代码中最明显的位置添加删除代码以进行删除。

// remove old stale data
$sql = "DELETE FROM user
        WHERE ts_created < DATE_ADD(NOW(),INTERVAL -2 HOUR)";

if ( ! $mysqli->query($sql) ) {
    // log $mysqli->error somewhere
}

虽然cron工作一见钟情似乎是一个好主意,为了确保在这张桌子上的东西总是准确的,你必须每隔30秒或甚至更频繁地运行它。这会妨碍此表上的其他活动,如果站点繁忙可能会出现问题,如果它不忙,那么大部分时间都会不必要地运行cron。

如果您在向用户提供此信息之前添加删除代码至少只会在需要时运行,并且您还要确保在向用户显示数据时表始终准确。 / p>

答案 1 :(得分:2)

使用命令行选项--event-scheduler = ON或在MySQL配置文件中设置event_scheduler = ON(Windows上的my.cnf或my.ini),可以确保启动MySQL时启动调度程序。 在mysql中运行此查询语句

SET GLOBAL event_scheduler = ON;

使用以下命令创建一个mysql事件调度程序 - 这将表现得像Cron Job,但实际上它是特定时间间隔内的mysql触发器。这是从mysql服务器触发的。

CREATE EVENT e_hourly
 ON SCHEDULE
  EVERY 1 HOUR
COMMENT 'Clears out sessions table each hour.'
DO
  DELETE FROM table_name WHERE UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(remove_time) > 120

http://dev.mysql.com/doc/refman/5.1/en/create-event.html
http://www.sitepoint.com/how-to-create-mysql-events/

请原谅我的解释 - 我自己刚刚实施了这个并且它有效。

答案 2 :(得分:0)

只需添加列remove_time(DATETIME)并设置您希望删除行的时间。比使用cron(配置依赖于你拥有的虚拟主机)来运行这个查询(可能是PHP脚本的一部分):

DELETE FROM table WHERE remove_time <= NOW()

您可以将cron配置为每分钟运行一次(或更少/更多,具体取决于您的需要)。

答案 3 :(得分:0)

  1. 尝试实施 cron ,它会在指定时间自动运行,以检查并删除 created_at 小于 current_time 2小时。

  2. 关于如何实施cron,请检查 Skilldrick 回答here

  3. 谢谢 :)