【发布时间】:2025-12-19 16:25:07
【问题描述】:
当使用乐观锁策略时,可以解决如下并发问题:
|第一笔交易开始| | | |选择一行 | | |第二笔交易开始 |使用版本检查更新行 | | |选择同一行 |提交交易 | | |使用版本检查更新行 | | | |因为版本脏了所以回滚但是,如果在极少数情况下,如果第二个事务中的更新是在第一个事务中的 udpate 之后但在事务提交之前呢?
|第一笔交易开始| | |第二笔交易开始 |选择一行 | | |选择同一行 |使用版本检查更新行 | | |使用版本检查更新行 |提交交易 | | |因为版本脏了所以回滚 // 会吗? | | | |我做了一个实验,第二个事务中的更新无法读取“脏”版本,因为第一个事务尚未提交。这种情况下第二次交易会失败吗?
【问题讨论】:
-
@Adam Arold 谢谢你告诉我这句格言。我用谷歌搜索它,因为我不是以英语为母语的人:) 但是在我提到的情况下,乐观锁定策略会起作用吗?
-
如果真的看好,你怎么用事务功能?更新将自行失败,无需回滚。
-
@tia 也许在示例中,有或没有事务都可以。但有时我需要将其他更改(例如,可能对子表的一些插入)回滚到数据库
-
抱歉,这是对《星球大战》的引用,我不得不提一下。