У меня есть таблица с именем events
, которая содержит внутриигровые события, такие как строительство зданий, исследования и т. Д. Каждое событие имеет timestamp
, указывающее, когда оно завершается.Engine: innoDB
При каждой загрузке страницы программа выполняет быстрый поиск в таблице events
строк, где timestamp
находится в прошлом (т. Е. Событие завершено).Он выбирает эти строки, а затем удаляет их, чтобы другие прогоны не видели и не обрабатывали одни и те же события.
Меня беспокоит то, что произойдет, если произойдет две страницы, чтобы они оба прочитали одни и те же строкидо того, как один или другой получит шанс удалить прочитанные строки, и что если событие произойдет прямо между выбором и удалением.
Я думаю, что это следует исправить:
SET @now=NOW();
SELECT * FROM `events` WHERE `timestamp` < @now FOR UPDATE
DELETE FROM `events` WHERE `timestamp` < @now
Но у меня возникли проблемы с тестированием.Как бы я проверил, работает ли это как надо?