使用乐观锁策略时,可以解决如下的并发问题:
| 第一个事务开始 | | | | 选择一行数据 | | | 第二个事务开始 | 检查版本并更新该行数据 | | | 选择同一行数据 | 提交事务 | | | 检查版本并更新该行数据 | | | | 因为版本已过期所以回滚但是,如果极少数情况下第二个事务的更新在第一个事务更新之后但在事务提交之前呢?
| 第一个事务开始 | | | 第二个事务开始 | 选择一行数据 | | | 选择同一行数据 | 检查版本并更新该行数据 | | | 检查版本并更新该行数据 | 提交事务 | | | 因为版本已过期所以回滚 //会吗? | | | |我进行了实验,发现第二个事务的更新无法读取“过期”的版本,因为第一个事务尚未提交。那么在这种情况下,第二个事务是否会失败?