Repeatable Read下的MVCC

MVCC是Repeatable Read隔离级别才有的,Read Commited没有,所有RC会出现不可重复读的问题。下面关于MVCC的细节进行下转载:

InnoDB的MVCC,通过在每行记录后面保存两个隐藏的列来实现:一个保存了行的创建版本号,一个保存行的删除版本号,每开始一个新的事务,系统版本号就会递增。在RR隔离级别下,MVCC的操作如下:

  • select操作。
    InnoDB只查找版本早于(包含等于)当前事务版本的数据行。可以确保事务读取的行,要么是事务开始前就已存在,或者事务自身插入或修改的记录。
    行的删除版本要么未定义,要么大于当前事务版本号。可以确保事务读取的行,在事务开始之前未删除。
  • insert操作。将新插入的行保存当前版本号为行版本号。
  • delete操作。将删除的行保存当前版本号为删除标识。
  • update操作。变为insert和delete操作的组合,insert的行保存当前版本号为行版本号,delete则保存当前版本号到原来的行作为删除标识。

转载于:mysql的MVCC(多版本并发控制)

你可能感兴趣的:(mysql)