我有一个MySQL(InnoDB)表,其中的列is_locked
显示了记录的当前状态(现在是由系统处理还是不由系统处理)。
另一方面,我有许多节点执行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
我发现表的锁定,但是我认为这不是正确的方法。 谁能告诉我如何处理此类案件?
答案 0 :(得分:0)
我推荐两件事:
将您的选择限制为一个,因为您要处理并发问题,因此每次迭代最好使用较小的“位数”
使用事务,这使您可以启动事务,获取记录,将其锁定然后提交事务。这将迫使mysql强制执行您的并发锁。