MVCC和事务的隔离级别


1、事务:一个数据库事务通常包含对数据库进行读或写的一个操作序列。

2、事务的四大属性(ACID

  (1)原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。

  (2)一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。

  (3)隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行。

  (4)持久性(Durability):一个事务一旦提交,他对数据库的修改应该永久保存在数据库中。

3、数据库4种隔离级别

  (1)读未提交(READ UNCOMMITTED) :一个事务还未提交时,它所作的变更就能被别的事务看到。

  (2)读提交(READ COMMITTED) :一个事务提交后,它所作的变更才能被别的事务看到。

  (3)可重复读(REPEATABLE READ) :一个事务执行过程中看到的数据,和这个事务在启动时候看到的数据是一致的。在可重复读级别,未提交的变更其他事务也不可见。

  (4)串?化(SERIALIZABLE) :对同一行记录,读会加读锁,写会加写锁。当出现读写锁冲突的时候,后访问的事务会等待前面的事务执行完后才可继续执行。

4、事务的隔离级别解决的问题

  (1)脏读:一个事务读到了另一个事务未提交修改过后的数据。

  (2)不可重复读:?个事务只能读到另?个已经提交的事务修改过的数据,并且其他事务每对该数据进??次修改并提交后,该事务都能查询得到最新值。

  (3)幻读:?个事务先根据某些条件查询出?些记录,之后另?个事务?向表中插?了符合这些条件的记录,原先的事务再次按照该条件查询时,能把另?个事务插?的记录也读出来。

5、事务隔离级别和MVCC的关系

  (1)在读提交 隔离级别下,这个视图是在每个SQL语句开始执?的时候创建的,在这个隔离级别下,事务在每次查询开始时都会?成?个独?的ReadView

  (2)可重复读,在第?次读取数据时?成?个ReadView,对于使? REPEATABLE READ 隔离级别的事务来说,只会在第?次执?查询语句时?成?个 ReadView ,之后的查询就不会重复?成了,所以?个事务的查询结果每次都是?样的。

  (3)串?化 隔离级别下直接?加锁的?式来避免并?访问。

  (4)序列化 被称为数据库隔离级别的 ??标准 ,它是绝?多数商业数据库系统中提供的最?隔离级别,?些?度?泛部署的系统甚??法提供隔离级别与可序列化?样?,?融的场景居多,性能也是最差的。