一个程序将从一个表中选择几条记录并更新每一行,同时它可以执行多次,这将导致多个进程同时完成同一任务。
如何防止两个不同的进程更新表中的同一行。也就是说,如何确保每个进程可以选择不同的记录?MySQL中的行选择级别是否有锁?还是在这种情况下,有没有更好的解决方案来防止多次更新单个行?
您可以使用SELECT FOR UPDATE。在事务内部,首先选择要“锁定”的行,如下所示:
SELECT * from TABLE where id = 123 FOR UPDATE;
Run Code Online (Sandbox Code Playgroud)
如果两个不同的事务尝试同时执行此操作,则MySQL将使第二个事务等待直到第一个事务提交了事务。这样,您可以放心,第二个事务仅在第一个事务完成后才查看该行。
| 归档时间: |
|
| 查看次数: |
4336 次 |
| 最近记录: |