Py学习  »  DATABASE

mysql-运行事务时锁定行

clarkk • 8 年前 • 369 次点击  

我有一笔交易要花一段时间才能完成。我希望保护受影响的行不被当前事务外部的更新

最佳实践是什么?

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

当事务启动时,我将更改/更新每行一列中的一个值,这样它将产生一个写锁,对吗?当前事务之外的其他查询仍然可以读取行(我不关心是否提取旧值或新值),但不写入它们?

当当前事务完成时,写锁被释放,其他查询可以再次写入行吗?

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

我对所有表都使用innodb引擎

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/30479
文章 [ 1 ]  |  最新文章 8 年前
kristaps
Reply   •   1 楼
kristaps    8 年前

SELECT ... FOR SHARE 可能是你想要的。从 MySQL docs :

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

在交易开始时, 选择…为了分享 您计划更新的所有行,然后继续实际更新。