[英]How to prevent selection of the row while it is being handled?
我有帶有列is_locked
MySQL(InnoDB)表,該表顯示記錄的當前狀態(現在是由系統處理還是不由系統處理)。
另一方面,我有許多執行SELECT * FROM table_name WHERE is_locked = 0
節點,然后處理從該表獲得的行。
在我的代碼中,我這樣做:
SELECT * FROM table_name WHERE is_locked = 0
) UPDATE table_name SET is_locked = 1 WHERE id = <id>
鎖定行 問題:節點運行非常快,所有節點都可能獲得同一行,然后它們首先更新該行並將is_locked
設置為1
我發現了表的鎖定,但我認為這不是正確的方法。 誰能告訴我如何處理這種情況?
我建議兩件事:
將選擇范圍限制為一個,因為您要處理並發問題,因此每次迭代最好取較小的“位數”
使用事務,這使您可以啟動事務,獲取記錄,將其鎖定然后提交事務。 這將迫使mysql強制執行您的並發鎖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.