这篇主要是对 锁与事务隔离级别 中MVCC内容的一个总结
我们都知道事务的4个特性,即 ACID。mysql 数据库使用加锁的方式来实现其中的 I (Isolation隔离性)。对于 InnoDB 存储引擎来说,它 支持行锁和表锁 ,而且行锁是由存储引擎通过给索引记录加锁来实现的,并且 InnoDB 默认是加行锁。好处就是锁定颗粒度小,发生锁冲突的概率低,并发度高
二进制日志 ( binary log) 是 Server
层的日志,记录了对 mysql 数据库执行更改的所有操作,但是不包括 SELECT和SHOW这类操作,因为这类操作对数据本身并没有修改。然而,若操作本身并没有导致数据库发生变化,那么该操作可能也会写入二进制日志。例如执行下列未更改的sql:
和字典、通讯录原理一样,索引的目的在于提高查询效率,通过不断的缩小数据的查找范围来筛选出最终想要的结果。比如要查找 “张三” 这个人,会先定位在姓 “张” 的人中,然后再从中查找 “三” 这个名。如果没有索引,那么可能需要把整个通讯录都翻一遍才能找到想要的。
再上一篇的事务隔离级别中说了mysql是通过两个隐藏列来实现的,后来又看了一些相关文章,发现好像和《高性能Mysql》说的有点不一样。mysql的mvcc是通过Read View和
Undo log来实现的,read view来判断数据行是否可读,undo log用来找到最近的可见版本。为了搞清楚内部是如何实现的(虽然不一定看的懂),所以想debug看下read view是如何生成的。