前言
ACID
数据库系统真正庞大而复杂的部分是事务存储管理器,该部分由以下四个彼此紧密关联的组件组成:
- 用于并发控制的锁管理器
- 用于事务恢复的日志管理器
- 数据库IO缓冲池
- 用于组织磁盘数据的访问方法
ACID并不是为了保证事务正确而被正式定义并经得起数学论证的术语,可串行化才是。他们的实现机制如下:
1 | 性质 实现机制 |
Atomicity(原子性)
Consistency(一致性)
Isolation(隔离性)
- 隔离级别是事务之间并发读写的控制级别,不同隔离级别对解决并发请求时可能会发生的脏读、重复度和幻读三个问题的程度不同。
- 事务隔离级别越高,就越能保证数据的一致性。
- 事务隔离界别越高, 对并发性能的影响也越大。
- 弱一致性隔离级别(也就是低隔离级别越低)相对于完全可串行化而言,可以提供更高的并发性能。
1 | 隔离级别 脏读 可重复读 幻读 |
ANSI SQL标准定义了四个“隔离级别”,按照增强的顺序可分为:
未提交读
一个事务可以读任何已提交或者未提交的数据。这可以通过“读操作不需要请求任何锁”来实现。
已提交读
一个事务可以读任何已提交的数据。对于同一个对象的重复读可能导致读到不同版本的数据。实现方式是,
读数据前必须首先获得一个读操作锁,一旦数据读取之后该锁被立即释放。
可重复读
在一个事务内,可重复度。一个事务只能读取一个已经提交数据的一个版本;一旦该事务读取了一个对象,那么,它将只能读取该对象的同一个版本。实现方式是,事务在请求读数据之前必须获得一个锁,并且保持该锁直到事务结束。
可串行化
多个事务相互交错的一组并发执行,必须与该组事务的一个串行执行结果相对应-即执行结果与没有并发的结果相同。
除了ANSI SQL隔离级别以外,很多厂商提供了其他的一些可应用于特殊情况的隔离性级别: