如何在mysql数据库中记录插入时间

时间:2011-07-11 11:33:22

标签: mysql database timestamp

一旦行为45分钟,我想从表new_data中删除一个表行,然后将其输入另一个名为old_data的表中。

我能想到这个工作的唯一方法,它查询数据库让我们说每分钟并删除任何行(current_time - 插入的时间)> 45分钟。

还有其他办法吗?如果不是我怎么能设置一个表来记录inserted_time?

编辑添加

如何编写此语句以将正确的数据检索到old_data表

SELECT * FROM new_spots WHERE (NOW()-created_at)>45mins

然后将上述内容插入old_data表

4 个答案:

答案 0 :(得分:1)

您可以在插入时指定时间列的值:

INSERT INTO x (created_at) VALUES (NOW());

另外,您可以设置VIEW以仅显示最近的条目。

答案 1 :(得分:1)

你要求某种auto expiration功能,它没有内置到mysql中。 Memcached提供此功能。因此,实现目标可能更清晰:

将数据插入系统时,您可以:

  1. 在45分钟到期时间内将数据插入memcached - 45分钟后,数据会自动从memcached中消失。
  2. 将数据插入带有created_at列的old_data表中 - 如果您需要在memcached重新启动或其他问题时重建memcached。
  3. 所以每次你只需要从memcached获取新数据 - 作为副作用,它比从mysql获取数据更快:)。

答案 2 :(得分:0)

我认为没有一种自动方法可以做到这一点。以下是一些不同的想法。

使用CRON

我有一个类似的场景,我们需要将数据从一个表聚合到另一个表。通过CRON运行的简单命令行工具就足够了。我们每秒都会在Web服务器中收到一些消息,每个消息都会导致数据库插入。因此,数量不是很大,但它们与您的情景相似[/ p>]

我们使用NOW()函数记录插入时间,在记录为1小时后,我们处理它们。这不是一个小时,但它足够好。您可以在下面看到created_on字段。

CREATE TABLE glossaries (
    id int(11) NOT NULL auto_increment,

    # Our stuff ...

    created_on datetime default NULL,
    KEY owner_id (owner_id),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


使用CRON和触发器

或者,您可以使用数据库触发器来启动处理。你仍然需要一些预定的东西来触发触发器,但你会得到最大的性能/

克里斯

答案 3 :(得分:0)

@keymone向您展示了如何捕获插入时间。然后,定期(每分钟似乎过度 - 每5分钟?15分钟?)通过并构建符合条件的列表,并为每个条目插入第二个表并从第一个表中删除。