9.2. 事务隔离

ANSI/ISO SQL 用三个必须在并行的事务之间避免的现象定义了四个级别的事务隔离。 这些不希望发生的现象是:

读污染(dirty reads)

一个事务读取了另一个未提交的并行事务写的数据。

不可重复的读(non-repeatable reads)

一个事务重新读取前面读取过的数据, 发现该数据已经被另一个已提交的事务修改过。

错误读取(phantom read)

一个事务重新执行一个查询,返回一套符合查询条件的行, 发现这些行中插入了被其他已提交的事务提交的行。

这四种隔离级别和对应的特性在下面描述。

Table 9-1. ANSI/ISO SQL 隔离级别

隔离级别 读污染(Dirty Read) 不可重复的读(Non-Repeatable Read) 错误读取(Phantom Read)
读未提交(Read uncommitted) 可能 可能 可能
读已提交(Read committed) 不可能 可能 可能
可重复读(Repeatable read) 不可能 不可能 可能
可串行化(Serializable ) 不可能 不可能 不可能

Postgres 提供读已提交(read committed)和可串行化(serializable)隔离级别。