ANSI/ISO 的
SQL
标准根据并发事务之间必须防止的三个现象,定义了四个事务隔离级别。这些不受欢迎的现象是:
- 脏读
一个事务读取了由并发未提交事务写入的数据。
- 不可重复读
一个事务重新读取它之前读过的数据,发现这些数据已经被另一个事务修改(且该事务已在初次读取之后提交)。
- 幻读
一个事务重新执行一个返回满足某个搜索条件的行集合的查询,发现满足该条件的行集合由于另一个最近提交的事务而发生了变化。
四种事务隔离级别及其对应行为见表 9.1。
表 9.1. SQL 事务隔离级别
| 隔离级别
| 脏读
| 不可重复读
| 幻读
|
|---|
| 读未提交
| 可能
| 可能
| 可能
|
| 读已提交
| 不可能
| 可能
| 可能
|
| 可重复读
| 不可能
| 不可能
| 可能
|
| 可串行化
| 不可能
| 不可能
| 不可能
|
PostgreSQL
提供读已提交和可串行化两个隔离级别。