看了这篇文章 http://www.cnblogs.com/dongqingswt/p/3460440.html 里面说:
在查询时要符合以下两个条件的记录才能被事务查询出来:
删除版本号 大于 当前事务版本号,就是说删除操作是在当前事务启动之后做的。
创建版本号 小于或者等于 当前事务版本号 ,就是说记录创建是在事务中(等于的情况)或者事务启动之前。
我现在假设两个事务对一行数据操作,版本号分别为 4,5
该行数据的 create version 是 3
id value create-ver delete-ver 3 15 3
假如版本 5 的事务查询这行数据 value 为 15
假如 版本 4 的事务过程中更新这数据行,则变成
id value create-ver delete-ver 3 15 3 4 3 20 4
这个时候,版本 5 的事务再次查询 因为 delete-ver 为 4 的话,因为不满足删除版本号大于事务版本号,所以不能被查询到 这个时候好像是查到 value 为 20? ( delete-ver 为空,所以不需要满足删除版本号 大于 当前事务版本号?)
这样哪里体现了可重复读啊?
BTW: 好像用了 MVCC,update 或者 delete 的时候,老数据行都不被删除,这样数据库岂不是冗余太多?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.