【问题标题】:How to reset a column value in MySQL after it's been set to a certain value after 1 hour?1小时后如何将MySQL中的列值设置为某个值后重置?
【发布时间】:2016-03-07 15:13:30
【问题描述】:

您好,我对 MySQL 事件和触发器还很陌生,我有一个名为 userstatus(userid, timestamp,count, flag) 的表,用于存储有关用户是否被阻止的数据.当计数达到 4 时,标志变为 0(阻塞)。你能帮我看看我能做些什么来在它被阻止一个小时后自动将标志重置为 1。 我试过以下代码:

create event testevent
on schedule
every 1 minute
starts CURRENT_TIMESTAMP
do 
update demo.userstatus set flag=1 
where timestampdiff(hour,timestamp,CURRENT_TIMESTAMP)>1

这似乎有效,但效率不高。任何帮助,将不胜感激。谢谢!

【问题讨论】:

  • 要么你有一个运行/重置所有相关标志的作业,要么你安排每个用户的单个作业在他们被阻止后运行一小时。一项工作更容易维护,但会更频繁地运行(取决于您想要解除阻塞的时间接近 1 小时)。例如如果您不关心用户可能会被阻止 1 小时 59 分钟(例如,在上午 9:01 被阻止,下一次解除阻止在上午 10 点运行,这意味着他们仅被阻止了 59 分钟,所以您在上午 11 点解除阻止)。

标签: mysql database-trigger mysql-event


【解决方案1】:

如果您将 datetime 字段添加到包含用户被阻止之前的日期和时间的 usersratus 表中,或者使用存储用户被阻止时间的现有时间戳字段而不是只有一个标志。

在登录或您认为适合的任何活动期间,您只需检查当前时间是否在或早于阻止时间(或在时间戳 + 1 小时之前或之前)。如果是,则该用户被阻止,您可以阻止该活动。如果不是,那么用户不会被阻止并且可以允许该活动。您甚至可以将第一次成功活动时的计数器恢复为 1。

这样您就无需定期检查数据库并清除状态标志。

【讨论】:

    猜你喜欢
    • 2021-05-22
    • 1970-01-01
    • 1970-01-01
    • 2019-10-02
    • 2015-10-02
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 2020-07-24
    相关资源
    最近更新 更多