PostgreSQL 的事務交易(Transaction)功能層級探討(一)
更新:2007-03-10
對映章節:C12
Concurrency Control - Transaction Isolation Level
內容:
SQL 定義的4種事務隔離(Transaction Isolation)層級
Isolation Level | Dirty Read | Nonrepeatable Read | Phantom Read |
---|---|---|---|
Read uncommitted | Possible | Possible | Possible |
Read committed | Not possible | Possible | Possible |
Repeatable read | Not possible | Not possible | Possible |
Serializable | Not possible | Not possible | Not possible |
在 PostgreSQL 裡,你可以請求四種可能的事務隔離級別中的任意一種。
但是在內部,實際上只有兩種獨立的隔離級別,分別對應讀已提交(Read Committed)和可序列化(Serializable)。 如果你選擇了讀未提交的級別,實際上你用的是讀已提交, 在你選擇可重複的讀級別的時候,實際上你用的是可序列化,所以實際的隔離級別可能比你選擇的更嚴格。 這是 SQL 標準允許的:四種隔離級分別定義了何種現象不能發生,但是沒有定義那種現象一定要發生。
PostgreSQL 只提供 2種隔離級別的, 原因是聰明的把標準的隔離級別映射(mapping)到PG 獨有的多版本併發控制(MVCC)架構中來實作更嚴謹的 4種層級。
http://www.postgresql.org/docs/current/interactive/sql-set-transaction.html
#BEGIN TRANSACTION ISOLATION [Level]; --宣告
BEGIN
...
SAVEPOINT []
ROLLBACK
ROLLBACK TO SAVEPOINT []
#END; --結束
COMMIT
沒有留言:
張貼留言