我个人的理解是这样的,不知道是否正确哈,说的不对的,请各位老师指点 1、假设B事务要去读id=1这一行数据,然后B事务的start.tso是11:00:00,那么按照tidb的隔离设计原则,B事务只能读到id=1这一行数据在11:00:00 之前版本最新的数据(比如id=1这一行在10:58有事务更新它了,然后10:59分又有事务更新它了,那么只能读到id=1在10:59这个时刻的状态)
2、存在读写冲突的一种情况 假设id=1这一行在10:58:00 这个时刻被某个事务更改提交了(id=1这一行的commit.tso就是10:58:00),假设B事务去读id=1这一行的时候,发现lock cf里面有id=1的记录(假设是A事务产生的,A事务还没有完全执行完整个事务的提交过程),A事务的start.tso是10:59:10(lock cf 里面也有start.tso的记录),这说明A事务已经完成了两阶段提交中的 prewrite阶段,正在进行commit阶段,而且已经获取了1个commit.tso是10:59:50,那么B事务就应该等待A事务提交完成,再去读id=1这一行的最新数据(commit.tso是10:59:50这一刻的状态,而不是直接读commit.tso是10:58:00 这个时刻的状态) mvcc的读写冲突,我个人认为是为了保证隔离级别的正确性,但是不知道如果读到commit.tso是10:58:00 这一刻的id=1的数据会不会有什么不好的后果?