事务 A (版本号为 2 )
1、START TRANSACTION; 2、SELECT * FROM test_mvcc WHERE id = 1; 6、UPDATE test_mvcc SET `value` = 'b' WHERE id = 1; 7、COMMIT; 事务 B (版本号为 3 )
3、START TRANSACTION; 4、UPDATE test_mvcc SET `value` = 'c' WHERE id = 1; 5、COMMIT; SQL 语句前面的序号为执行顺序,事务 A 开始做了一个快照读。然后事务 B 开启,修改数据并提交,此时数据的版本号应该是 3。这时候事务 A 也修改数据,然后提交的时候发现数据库中数据的版本号比自己的大,所以修改失败回滚操作。
以上是最近通过学习 MVCC 我认为理论上应该出现的情况,然后我自己测试发现事务 A 还是能提交成功,这究竟是什么原因?难道是哪里的理解有偏差吗。(当前数据库隔离级别为 Read Repeatable )
