mvcc机制中repeatableread的一些问题
2个会话session,分别开启2个事务。 第一个select后等待,第二个会话事务insert了一条记录laoqi 测试,如果第一个会话事务这时候update的是id=1的数据,则下个select还是只是查的三四五六的数据,三的数据为更改后的数据。如果update的是他非repeatable的三四五六的新的qi的数据则下次select的是三四五六七。 原来我一直以为只要在事务内insert/update/delete任何条件都会同步成最新数据的快照下次select都是最新的快照数据,看来不对。只有操作到了的新数据才会被同步,下个select会带回来。 MVCC事务版本号不同语句产生的原则 INSERT InnoDB为新插入的每一行保存当前系统版本号作为版本号. DELETE(delete) InnoDB会为删除的每一行保存当前系统的版本号(事务的ID)作为删除标识. 根据update的更新原则:会生成新的一行,并在原来要修改的列的删除时间列上添加本事务ID,得到表如下: id name 创建时间(事务ID) 删除时间(事务ID) 1 yang 1 4 2 long 1 5 3 fei 1 undefined 4 tian 3 undefined 2 Long 5 undefined SELECT InnoDB会根据以下两个条件检查每行记录: a