事務隔離
ANSI/
ISOSQL
用三個必須在並行的事務之間避免的現像定義了四個級別的事務隔離。這些不希望發生的現像是:
-
讀污染(dirty reads)
-
一個事務讀取了被另一個未提交的並行的事務寫的數據。
-
不可重複的讀(non-repeatable reads)
-
一個事務重新讀取前面讀取過的數據,發現該數據已經被另一個已提交的事務修改過。
-
錯誤讀取(phantom read)
-
一個事務重新執行一個查詢,返回一套符合查詢條件的行,發現這些行中插入了被其他已提交的事務提交的行。
這四種隔離級別和對應的特性在下面描述。
表 13-1. Postgres 隔離級別
| |
讀污染(Dirty Read) |
不可重複的讀(Non-Repeatable Read) |
錯誤讀取(Phantom Read) |
| 讀未提交(Read uncommitted) |
可能 |
可能 |
可能 |
| 讀已提交(Read committed) |
不可能 |
可能 |
可能 |
| 可重複讀(Repeatable read) |
不可能 |
不可能 |
可能 |
| 可串行化(Serializable ) |
不可能 |
不可能 |
不可能 |