InnoDB 的 MVCC ,是通过在每行记录后保存两个隐藏的列来实现的(用户不可见)。一个
列保存行创建的时间,一个列保存行过期(删除)的时间,这里所说的时间并不是传统意义
上的时间,而是系统版本号,下面是 REPEATABLE READ 隔离级别下 MVCC 的具体操作:
-SELECT
InnoDB 会根据以下两个条件检查每行记录:
( 1 ) InnoDB 只查找版本早于当前事务版本的数据行(行的系统版本号小于或者等于事务
的系统版本号),这样可以确保事务读取到的行,要么是在事务开始之前已经存在的,要么
是事务自身插入或者修改过的;( 2 )行的删除版本要么未定义,要么大于当前事务版本
号。可以确保事务读取到的行,在事务开启之前未被删除。
-INSERT
InnoDB 为新插入的每一行保存当前系统版本号作为行版本号。
-DELETE
InnoDB 为删除的每一行保存当前系统版本号作为行删除标识(第二个隐藏列的作用来
了)。
-UPDATE
InnoDB 将更新后的列作为新的行插入数据表,并保存当前系统版本号作为该行的行版本
号,同时保存当前系统版本号到原来的行作为行删除标识。
评论0