【发布时间】:2013-03-05 18:06:42
【问题描述】:
一个程序会从一个表中选择几条记录并更新每一行,而它可以执行多次,这将导致多个进程同时完成同一个任务。
如何防止两个不同的进程更新表中的同一行。也就是说,如何保证每个进程可以选择不同的记录呢? MySQL 中的行选择级别是否有任何锁?或者在这种情况下,有没有更好的方案来防止单行多次更新?
【问题讨论】:
-
TRANSACTIONS,INNODB找这两个
-
@swapnesh 我试过 INNODB,事务。当一个进程启动事务时,
use lock in share mode不会阻止另一个进程获取同一行,而只是将其锁定以不更新和删除。 -
@JoachimIsaksson 该解决方案可能有弱点。如果两个进程几乎同时运行,是否存在第二个进程在行
status字段更改之前获取列表的可能性?