程序将从表中选择多个记录并更新每一行,同时可以执行多次,这将导致多个进程同时完成相同的任务。
如何防止两个不同的进程更新表中的同一行。也就是说,我如何确保每个进程可以选择不同的记录? MySQL中的行选择级别是否有锁定?或者在这种情况下,是否有更好的解决方案可以防止单行更新多次?
答案 0 :(得分:4)
您可以使用SELECT FOR UPDATE
。在您的交易中,开始选择您想要“锁定”的行,如下所示:
SELECT * from TABLE where id = 123 FOR UPDATE;
如果两个不同的事务同时尝试执行此操作,MySQL将使第二个事务等待,直到第一个事务提交事务。这样,您就可以确信第二个事务只会在第一个事务完成之后查看该行。