Как сбросить значение столбца в 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.
Таким образом, вы избегаете необходимости периодически проверять базу данных и очищать флаг состояния.