有没有办法让MySql数据库“自我更新”?

时间:2010-11-23 21:00:06

标签: php javascript sql mysql database

我有一个mysql数据库,或者更具体的是一个我存储IP地址的mysql表。

这是因为我限制从我的网站发送的消息的数量。 我只是检查IP是否在表中,如果是,我告诉用户“减速”。

有没有办法让这个MySql表只存储x分钟的行(记录)?

其他解决方案也很受欢迎......

5 个答案:

答案 0 :(得分:2)

不,但您可以在插入/修改行时使用TIMESTAMP字段进行存储,并偶尔删除超过x分钟的行。

DELETE FROM your_table
WHERE your_timestamp < NOW() - interval 5 minute

为了解决您的实际问题,我建议为每个用户提供一个包含行的表,以及他们上次发送邮件的时间。假设它已正确索引并且您的查询有效,您可能不需要从该表中删除任何行,除非您使用用户表的外键并删除相应的用户。当用户发送消息时,如果已存在则插入一行,否则更新现有行(如果您愿意,可以使用例如MySQL扩展REPLACE)。

答案 1 :(得分:0)

我建议您向SELECT添加一个关于时间的WHERE子句“只需检查IP是否在表中”

 SELECT * FROM table WHERE ip = <whatever> and timestamp > NOW() - 3*60

然后每晚可能会把那张桌子清空一次。

答案 2 :(得分:0)

我会创建一个列,其中包含上次发送的消息的时间戳,另一列具有帖子总数。在更新表之前,检查自上次发布以来是否已经过了至少X分钟。如果是这样,请将帖子总数更改为1,否则将值增加1。

答案 3 :(得分:0)

在一定间隔后不涉及删除 IP地址的一种方法是将地址存储为“时间”数据,即仅在某段时间内有效的记录。

最简单的方法是向表中添加时间戳列,并在输入IP时捕获输入表中的时间或不再“限制”的时间。

抓取IP限制的代码然后检查时间戳以查看它是否:

  • 超过某个阈值(例如,如果您在一个多小时前录制了IP,请忽略它)或
  • 当前时间大于存储在那里的失效日期(例如,如果IP的时间戳显示为2010-11-23 23:59:59,那就是过去,请忽略它)

取决于您选择要表示的时间戳。

答案 4 :(得分:0)

此处使用时间戳和cron作业的其他解决方案可能是您的最佳选择,但如果您坚持使用mysql处理此问题,则可以使用Events。它们就像cron作业,除了mysql处理调度本身。它需要5.1+。