是什么
一致性非锁定读(consistent nonlocking read)是指InnoDB存储引擎通过行多版本控制(multi versioning)的方式来读取当前执行时间数据库中行的数据。如果当前读取的是一个在更新的操作或者删除的操作,不会等待锁的释放,会先读取InnoDB存储引擎中快照数据。
利
非锁定读机制极大的提高了数据库的并发性。
弊
在不同的事务隔离级别下 读取方式不同。并不是在每个事务隔离级别下都采用非锁定的一致性读
对于快照数据的定义也各不相同。
Demo演示
对于repeatable read 的事务隔离级别 总是读取事务开始时的行数据,因此对于readtable read事务隔离级别。
对于read committed的事务隔离级别,他总是读取行的最新版本,如果行被锁定了,则读取改行版本的最新一个快照
小结
一致性非锁定读,在不同的事务隔离界别下,读取的数据是不一样的。
在可重复读的隔离级别下,读取到的是旧的值,也就是说 第一次读取的是a 别人修改后 还是读取的a值
在读已提交的隔离级别下,读取的是最先的值。
我们来思考这样一个问题,为什么需要一致性非锁定读。其实不难想象,任何事物都遵循28原则,同样在一个应用层系统软件中,数据库读操作远大于写操作,也就是说,大部分情况下。请求的数据都是读操作。而这种机制下,我们就可以直接使用非锁定性一致读机制,提高系统的并发性。因此,凡事出现都有其原因,我们只有看到本质才能更好的理解这些技术的出现 解决了什么问题。