【问题标题】:Is there any way to make MySql database "update itself"?有什么方法可以让 MySql 数据库“自我更新”?
【发布时间】:2010-11-23 21:00:05
【问题描述】:

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

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

有什么办法可以让这个 MySql 表只存储一行(一条记录)x 分钟?

其他解决方案也值得赞赏...

【问题讨论】:

    标签: php javascript sql mysql database


    【解决方案1】:

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

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

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

    【讨论】:

    • 我写的和你写的完全一样吗,“NOW() - 间隔 5 分钟”以获得 5 分钟的间隔?如果没有,请注意更新我应该如何编写代码来比较 now() 和说 3 小时之间的时间戳?
    • @Camran:这给了你 5 分钟前的时间。尝试运行SELECT NOW() - interval 3 hour,您应该会得到 3 小时前的时间。
    • 我其实有一个 DATETIME 字段,而且间隔不起作用。有没有使用 3*60*60 之类的东西三个小时?
    • @amran:减去间隔也适用于 DATETIME 列。您可能犯的一个错误是输入hours 而不是hour。单位必须在 MySQL 中是单数形式。如果仍然无法正常工作,请发布您尝试过的确切查询以及错误消息。
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        最简单的方法是在表中添加一个时间戳列,并在输入 IP 时捕获它被输入到表中的时间,或者它不再被“限制”之后的时间。

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

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

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

        【讨论】:

          【解决方案5】:

          这里使用时间戳和 cron 作业的其他解决方案可能是您最好的选择,但如果您坚持让 mysql 自己处理,您可以使用Events。它们就像 cron 作业,除了 mysql 自己处理调度。不过它需要 5.1+。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-06-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多