MySql的“MVCC”之我的理解
数据库隔离级别通俗解释: 读未提交:一个事务还没提交时,它做的变更就能被别的事务看到 读提交:一个事务提交以后,它做的变更才会被其他事务看到 可重复读:一个事务执行过程中看到的数据,总是跟这个事务在启动时候看到的数据是一致的。当然在可重复读隔离级别下,未提交变更对其他事务也是不可见的 串行化:对于同一个记录,“写”会加“写锁”,读会加读锁。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才可以继续执行。 MYSQL的MVCC: MVCC(Mutil-Version Concurrency Control),就是多版本并发控制。MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问。 在Mysql的InnoDB引擎中就是指在已提交读(READ COMMITTD)和可重复读(REPEATABLE READ)这两种隔离级别下的事务对于SELECT操作会访问版本链中的记录的过程。 这就使得别的事务可以修改这条记录,反正每次修改都会在版本链中记录。SELECT可以去版本链中拿记录,这就实现了读-写,写-读的并发执行,提升了系统的性能。 我们来具体看看是如何实现的。 版本链 我们先来理解一下版本链的概念。在InnoDB引擎表中,它的聚簇索引记录中有两个必要的隐藏列: trx_id这个id用来存储的每次对某条聚簇索引记录进行修改的时候的事务id。 roll