例如按照下面时间顺序执行
因为 B 查询的数据要求是 createdAt < B.version && (deletedAt > B.version || deletedAt = null)
那么在事务 B 中,第一次查询到的记录和第二次查询到的记录是不一样的
这个怎么解释?
1
ixiaohei 2017-10-19 18:32:30 +08:00
版本号和回滚段保证可重复读。
|
3
domty 2017-10-19 18:47:56 +08:00
Next-Key Lock
|
4
namedfish 2017-10-19 19:18:05 +08:00 via iPhone
在隔离级别为可重复读的情况下可以保证,详情可以 google mysql 隔离级别设置
|
5
ixiaohei 2017-10-19 20:13:26 +08:00
@sunkuku 我说错了,mysql 的 mvvc 的可以保证重复读,但是幻读是间隙锁还是什么东西保证的,具体可以读 mysql 官方文档。
另外你说的读到另外新插入的行这个是幻读,不是可重复读,可重复读这个隔离级别不保证幻读的。但是 mysql 可重复度貌似解决幻读(当时读文档很是因垂丝丁) |
6
sunkuku OP |
7
sunkuku OP |
8
ixiaohei 2017-10-23 17:51:45 +08:00
@sunkuku 你要研究深,还有个快照读和当前读区别,一般 mvcc 只是保证快照读可重复读,另外当前读应该就是间隙锁保证的(这个我不是很了解)
|
9
sunkuku OP 这个是 MVCC 实现原理的文章,放在团队博客上了
http://fridaytalk.org/archives/20/ |