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
這很好,事件本身只對第二個精確。我想要做的是鎖定選定的行,但我也想避免任何其他進程陷入僵局。 –