Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
一个程序会从一个表中选择几条记录并更新每一行,而它可以执行多次,这将导致多个进程同时完成同一个任务。
如何防止两个不同的进程更新表中的同一行。也就是说,如何保证每个进程可以选择不同的记录呢?MySQL 中的行选择级别是否有任何锁?或者在这种情况下,有没有更好的方案来防止单行多次更新?
您可以使用SELECT FOR UPDATE. 在您的事务中,开始选择您要“锁定”的行,如下所示:
SELECT FOR UPDATE
SELECT * from TABLE where id = 123 FOR UPDATE;
如果两个不同的事务尝试同时执行此操作,MySQL 将使第二个事务等待,直到第一个事务提交。这样,您就可以确保第二个事务只在第一个事务完成后才查看该行。