如何在MySQL中锁定一行进行选择[重复]

问题描述 投票:0回答:1

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

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

mysql locks
1个回答
13
投票

您可以使用

SELECT FOR UPDATE
。在您的事务中,开始选择您想要“锁定”的行,如下所示:

SELECT * from TABLE where id = 123 FOR UPDATE;

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

© www.soinside.com 2019 - 2024. All rights reserved.