脏读、不可重复读、幻读,这是概念,如果不理解,听起来会很懵逼。
脏读,是两个事务相互影响,导致数据不准,读未提交会导致脏读、不可重复读、幻读。
不可重复读,是同一个事务里面,每次读取的数据不一样,读已提交。引入了快照的概念,读取的是快照,快照有不同的版本号,根据版本号可以判断事务提交的先后顺序。避免了数据的混乱。如果A事务开始之后,B事务修改并提交了同一条数据,那么A事务会从undo log里面找到B事务开始之前的数据。实现可重复读,使用的是mvcc,多版本并发控制。
幻读,是数据新增导致的,因为新增的数据不在库里面,无法通过上面的方法控制。得用间隙锁控制,通过对区间加锁来解决幻读的问题。