您的位置:首页 > 数据库 > MySQL

做一个合格的程序猿之MYSQL存储引擎INNODB简介之非锁定读(二)

2016-03-03 20:02 579 查看
MYSQL5.5版本之后默认的存储引擎是INNODB,其最主要的特点之一是支持非锁定读

  面试中最常见的问题是mysql的事务隔离级别,感觉大家都快背诵了(下面摘入于《高性能MYSQL第三版》):

 








好了,背诵完了之后,简单的介绍一下原理:

首先介绍一下多版本并发控制(MVCC,Multi Version Concurrency Control)

  因为innodb存储引擎一个特性是非锁定读,即意味着当某行数据正在做更新操作的时候,这时会产生行级锁,此时该读取线程并不会等待该锁的释放,而是先读取这一行的快照,并且该行不止一个快照,快照(Snapshot)是指该行之前版本的数据,多个快照是这行数据的多个版本,这种技术就叫做MVCC技术

                                                                        


                                                                                               (图片来自《MYSQL技术内幕 INNODB存储引擎》)

 在事务级别是READ COMMITED的情况下,线程总是读取最新一份快照数据,因为在读取的过程中,其他的线程可能操作了该行数据,所以每次读取的数据可能不一致,即产生了所谓的脏读的情况,也可以叫做不可重复读,因为每次读取的内容不一定一样

 在事务级别是READ REPEATABLE情况下,线程总是读取事务开始时的行版本的数据,所以读取的内容总是一致的

   

  

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息