8

一个程序会从一个表中选择几条记录并更新每一行,而它可以执行多次,这将导致多个进程同时完成同一个任务。

如何防止两个不同的进程更新表中的同一行。也就是说,如何保证每个进程可以选择不同的记录呢?MySQL 中的行选择级别是否有任何锁?或者在这种情况下,有没有更好的方案来防止单行多次更新?

4

1 回答 1

12

您可以使用SELECT FOR UPDATE. 在您的事务中,开始选择您要“锁定”的行,如下所示:

 SELECT * from TABLE where id = 123 FOR UPDATE;

如果两个不同的事务尝试同时执行此操作,MySQL 将使第二个事务等待,直到第一个事务提交。这样,您就可以确保第二个事务只在第一个事务完成后才查看该行。

于 2013-03-17T09:40:31.320 回答