mysql-在运行事务时锁定行

时间:2018-10-03 07:22:10

标签: mysql

我有一笔交易需要一段时间才能完成。我想保护受影响的行,使其免受当前事务外部的影响

这样做的最佳实践是什么?

首先,如果事务外的其他查询仍然可以读取行,这样我的应用程序在执行工作时不会完全保留,那就很好了。

当事务开始时,我将更改/更新每一行中一列中的值,这样它将对写锁起作用吗?当前事务之外的其他查询仍可以读取行(我不在乎是否获取旧值或新值),但不写入行?

当前事务完成后,写锁定被释放,其他查询可以再次向行写数据吗?

这是最佳实践还是有更好的方法?

我对所有表使用InnoDB引擎

1 个答案:

答案 0 :(得分:0)

SELECT ... FOR SHARE可能就是您想要的。来自MySQL docs

  

在读取的任何行上设置共享模式锁定。其他会话可以读取行,但是在事务提交之前不能修改它们。如果这些行中的任何一个被尚未提交的另一个事务更改,则查询将等待直到该事务结束,然后使用最新值。

在交易开始时,您将SELECT ... FOR SHARE计划更新的所有行,然后进行实际的更新。