Как сбросить значение столбца в MySQL после того, как оно было установлено на определенное значение через 1 час?

Привет, я новичок в событиях и триггерах 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 ответ

Было бы намного эффективнее, если бы вы добавили поле даты и времени в таблицу usersratus, содержащую дату и время до блокировки пользователя, или использовали существующее поле отметки времени, которое хранится, когда пользователь был заблокирован, вместо того, чтобы иметь только флаг.

Во время входа в систему или любой деятельности, которую вы считаете подходящей, вы просто проверяете, включено ли текущее время или раньше, чем время блокировки (или включено или до отметки времени + 1 час). Если да, то пользователь заблокирован, и вы можете предотвратить активность. Если нет, то пользователь не блокируется и может разрешить активность. Вы можете даже восстановить счетчик при первом успешном действии до 1.

Таким образом, вы избегаете необходимости периодически проверять базу данных и очищать флаг состояния.

Другие вопросы по тегам