如何在MySQL中锁定选择行

All*_*Koo 3 mysql locks

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

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

mju*_*rez 5

您可以使用SELECT FOR UPDATE。在事务内部,首先选择要“锁定”的行,如下所示:

 SELECT * from TABLE where id = 123 FOR UPDATE;
Run Code Online (Sandbox Code Playgroud)

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