运行事务时锁定行

pvabu6sv  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(279)

我有一笔交易需要一段时间才能完成。我想保护受影响的行不从当前事务外部更新
这样做的最佳做法是什么?
首先,如果事务之外的其他查询仍然可以读取行,这样我的应用程序在执行工作时就不会执行完全的hold。
当事务开始时,我将更改/更新每行一列中的值,这样它就可以进行写锁定了,对吗?当前事务之外的其他查询仍然可以读取行(我不关心是否提取旧值或新值),但不能写入行?
当当前事务完成时,写锁被释放,其他查询可以再次写入行吗?
这是最好的做法还是有更好的办法?
我对所有表都使用innodb引擎

bybem2ql

bybem2ql1#

SELECT ... FOR SHARE 可能就是你要找的。从mysql文档:
在读取的任何行上设置共享模式锁。其他会话可以读取行,但在事务提交之前不能修改它们。如果这些行中的任何一行被另一个尚未提交的事务更改,则查询将等待该事务结束,然后使用最新的值。
在交易开始时 SELECT ... FOR SHARE 您计划更新的所有行,然后继续实际更新。

相关问题