0
我有一个名为events
的表,其中包含游戏中的事件,如建筑物的建筑,研究等。每个事件都有一个timestamp
指示它何时完成。引擎:innoDB测试MySQL锁定正常工作
每次页面载入,程序都会在过去(即事件已完成)的行中快速搜索events
表。它选择这些行然后删除它们,所以其他任何运行都不会看到并处理相同的事件。
我担心的是如果发生两个pagelod会发生什么,以至于他们两个在一个或另一个有机会删除读取行之前读取相同的行,以及如果在选择并删除。
我在想什么应该修复它是:
SET @now=NOW();
SELECT * FROM `events` WHERE `timestamp` < @now FOR UPDATE
DELETE FROM `events` WHERE `timestamp` < @now
,但我有一些麻烦测试它。我将如何去测试它是否正常工作?
我认为这将不起作用,因为像MySQL中的NOW()这样的时间函数对第二个函数只有精度。某些页面加载将在同一秒内发生,并以毫秒为单位进行加载。 – Xint0
这很好,事件本身只对第二个精确。我想要做的是锁定选定的行,但我也想避免任何其他进程陷入僵局。 –