Scroll to navigation

SET TRANSACTION(7) SQL Commands SET TRANSACTION(7)

NAME

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

SYNOPSIS

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 ]

DESCRIPTION 描述

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 都不允許。這是一個高層次的只讀概念,它並不阻止對磁碟的寫入。

NOTES 注意


會話的預設事務隔離級別也可以用命令

SET default_transaction_isolation = 'value'


以及在配置檔案裡設定。 參考 Section 16.4 ``Run-time Configuration'' 獲取更多資訊。

COMPATIBILITY 相容性


兩個命令都在 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