mvcc理解不全
我们在mysql的innodb结构下主要适用的是(REPEATABLE-READ)可重复读隔离界别,可解决脏读,不可重复读,但不能解决幻读。
可重复读的情况加,在开启事务之后,每次查询的结果都是一样的,不管数据是否被修改提交,主要就是mvcc(Multi-Version Concurrency Control)实现的。
mvcc
undo:任务日志链是对一行数据反复修改产生的版本,每次修改后都会有一个指针,指向上一个修改记录,并且用两个隐藏字段trx_id和roll_pointer把这些undo日志串联起来形成一个历史记录版本链
在可重复读的情况下,开启了事务之后,一个查询就会生成一个read-view对象,read-view是所有未提交的事务id组成数组加上一个最大的已提交事务id,如下图trx_id为1的是数据库中本身存在的数据,那结果就是[100.200],300