一、概述
我们的数据库一般都会并发执行多个事务,多个事务可能会并发的对相同的一批数据进行增删改查操作,可能就会导致我们说的脏写、脏读、不可重复读、幻读这些问题。
这些问题的本质都是数据库的多并发事务问题,为了解决多事务并发问题,数据库设计了事务的隔离级别、锁机制、MVCC多版本并发控制隔离机制,用一整套机制来解决多事务并发问题。接下来我们会深入讲解这些机制,让大家彻底理解数据库内部的执行原理。
二、事务及其ACID属性
事务是由一组SQL语句组成的逻辑处理单元,事务具有以下4个属性,通常简称为事务的ACID属性。
- 原子性(Atomicity):事务是一个原子操作单位,对其数据的修改,要么全部执行,要么全都不执行。
- 一致性(Consistent):在事务开始和完成时,数据都必须保持一致性。这意味着所有相关的数据规则都必须应用于事务的修改,以保持数据的完整性。
- 隔离性(Isolation):数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的独立环境执行,这意味着事务处理过程中的中间状态对外部是不可见的。
- 持久性(Durable):是我完成后,他对于数据的修改是永久性的,及时出现了系统故障也能保持。