mysql有三行隐藏列: row_id 事务版本id 创建版本id
事务二当中,在第一次查询时开启了一个快照。所以id为3 名字为tom的那行记录 插入的时候的创建版本是3,所以在本快照里是没有的,所以查不到。
那么总结一下 ,在 mvcc 中,什么样的记录在快照中查不到呢,
1、在建立快照之后 别的事务commit的事件无法查看到。
2、在建立快照的时候,状态是活跃状态(还未commit)的事务,也是无法在快照中查看的。
注意: 本事务的修改是可以查看的!!
实现方法:
ReadView:事务ID的列表(当前活跃的事务ID) + .根据undo log 链循环获取上一个版本.
mvcc 只能在RC RR 中使用
如果没有锁 就会使用mvcc,那查询的时候有些什么锁呢!
间隙锁最大的作用:阻塞插入!!
等于前两种锁 同时使用~