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