MVCC细节太多,我直接备忘一下总结:sql
MVCC就是经过事务的ID与行数据的版本(修改事务的ID)进行比较(经过redo log能够回溯版本)得出哪些版本的行数据可见和不可见而实现的事务隔离事务
可重复读,查询只认可在事务启动前就已经提交完成的数据
读提交,查询只认可在语句启动前就已经提交完成的数据
本身版本更新的总可见(版本=事务/语句)
其余版本未提交的不可见it
版本已经提交,可是是在当前版本以后建立的不可见
版本已经提交,可是在当前版本开始前提交的可见(虽然都提交,可是建立视图的点不一样)io
更新操做中的读,只能是当前读,已经提交完成的最新版本,或者遇到行锁阻塞sql语句
一、start transaction 开始事务的语句事务开启点是在不是这句,而是第一个执行sql语句的地方
二、start transaction with consistent snapshot 开始事务的语句事务开启点在这这句总结
start transaction 和 start transaction with consistent snapshot都是以每条语句的执行建立视图数据