DOKK / manpages / debian 10 / manpages-zh / set_transaction.7.zh_TW
SET TRANSACTION(7) SQL Commands SET TRANSACTION(7)

SET TRANSACTION - 設置當前事務的特性

SET TRANSACTION

[ ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE } ] [ READ WRITE | READ ONLY ] SET SESSION CHARACTERISTICS AS TRANSACTION
[ ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE } ] [ READ WRITE | READ ONLY ]

SET TRANSACTION 命令爲當前事務設置特性。 它對後面的事務沒有影響。 SET SESSION CHARACTERISTICS 爲一個會話中的每個事務設置缺省的隔離級別。 SET TRANSACTION 可以爲一個獨立的事務覆蓋上面的設置。


可用的事務特性是事務隔離級別和事務訪問模式(讀/寫或者只讀)。


事務的隔離級別決定一個事務在同時存在其它並行運行的事務時它能夠看到什麼數據。


一條語句只能看到在它開始之前的數據。這是缺省。

當前的事務只能看到在這次事務第一條查詢或者修改數據的語句執行之前的數據。

Tip: 提示: 說白了,serializable(可串行化)意味着兩個事務將把數據庫保持在同一個狀態, 就好象這兩個事務是嚴格地按照先後順序執行地那樣。


事務隔離級別在事務中第一個數據修改語句 (SELECT, INSERT, DELETE, UPDATE, FETCH, COPY) 執行之後就不能再次設置。 參閱 Chapter 12 ``Concurrency Control'' 獲取有關事務隔離級別和併發性控制的更多信息。


事務訪問模式決定事務是讀/寫還是隻讀。讀/寫是缺省。如果一個 事務是隻讀,而且寫入的表不是臨時表,那麼下面的 SQL 命令是不允許的:INSERT, UPDATE,DELETE,和 COPY TO; 而所有的 CREATE,ALTER,和 DROP 命令; COMMENT,GRANT,REVOKE, TRUNCATE;和 EXPLAIN ANALYZE 和EXECUTE 都不允許。這是一個高層次的只讀概念,它並不阻止對磁盤的寫入。


會話的缺省事務隔離級別也可以用命令

SET default_transaction_isolation = 'value'


以及在配置文件裏設置。 參考 Section 16.4 ``Run-time Configuration'' 獲取更多信息。


兩個命令都在 SQL 標準裏定義了。SQL 裏的缺省事務隔離級別是 SERIALIZABLE; 在 PostgreSQL 裏,缺省隔離級別是 READ COMMITED,但是你可以用上面的描述修改它。 PostgreSQL 並沒有提供隔離級別 READ UNCOMMITTED 和 REPEATABLE READ。 因爲多版本併發控制,SERIALIZABLE 級別並非真正的可串行化。參閱 Chapter 12 ``Concurrency Control'' 獲取細節。


在 SQL 標準裏還有另外一種事務特性可以用這些命令設置:診斷範圍的大小。這個概念只用於嵌入的 SQL。

譯者

Postgresql 中文網站 何偉平 <laser@pgsqldb.org>

本頁面中文版由中文 man 手冊頁計劃提供。
中文 man 手冊頁計劃:https://github.com/man-pages-zh/manpages-zh

2003-11-02 SQL - Language Statements