0

嗨,我对 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

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

4

1 回答 1

0

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

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

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

于 2016-03-07T15:22:27.170 回答