Postgresql
什麼是自動送出的隔離級別?
我試圖從“自動送出”概念中理解。
最初我在 Java JDBC API Connection.setAutoCommit(boolean autoCommit)的上下文中對此很感興趣
快速搜尋發現該術語並非特定於 JDBC,PostgreSQL 也指“自動送出”:
https://www.postgresql.org/docs/current/sql-start-transaction.html
在標準中,不必發出
START TRANSACTION
啟動事務塊:任何 SQL 命令都隱式地開始一個塊。PostgreSQL 的行為可以被看作是在每個不跟隨START TRANSACTION
(或BEGIN
)的命令之後隱式發出一個 COMMIT,因此它通常被稱為**“自動送出”。為了方便起見,其他關係數據庫系統可能會提供自動送出**功能。如果它很普遍**,自動送出模式的隔離級別是什麼**?
從概念上講,因為在隱式隔離級別之前我們只有一個 SQL 語句
COMMIT
,因此自動送出幾乎沒有意義。只有 READ UNCOMMITTED 可能會影響結果,其他異常以 SQL 語句序列的形式定義。我可以將自動送出隔離級別更改為/遠離未送出的閱讀嗎?
預設隔離級別通過default_transaction_isolation控制,並且
read committed
在標準安裝中。您可以使用以下命令檢查目前設置:
show default_transaction_isolation;
由於 Postgres 不支持(或實現)
read uncommitted
,因此無需更改此“遠離未送出的讀取”。如果您想將隔離級別更改為“更高”級別,即使在自動送出模式下,您也可以使用:
set default_transaction_isolation = serializable;
以上將更改目前會話(=連接)的預設值。