SET TRANSACTION
SET TRANSACTION — 设置当前事务的特性
大纲
SET TRANSACTION ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE }
SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL
{ READ COMMITTED | SERIALIZABLE }
描述
这条命令设置事务的隔离级别。SET TRANSACTION 命令设置当前 SQL 事务的特性。它对任何后续事务都没有影响。这条命令不能在事务的第一条查询或数据修改语句(SELECT、INSERT、DELETE、UPDATE、FETCH、COPY)已经执行之后使用。SET SESSION CHARACTERISTICS
设置一个会话中每个事务的默认事务隔离级别。对于单个事务,SET TRANSACTION 可以覆盖它。
事务的隔离级别决定该事务在其他事务并发运行时能看到哪些数据。
- READ COMMITTED
一条语句只能看到在它开始之前已提交的行。这是默认值。
- SERIALIZABLE
当前事务只能看到在本事务中第一条查询或数据修改语句执行之前已提交的行。
提示
直观地说,可串行化意味着两个并发事务给数据库留下的状态,与这两个事务严格地一个接一个按任一顺序执行后的状态相同。
注解
会话默认的事务隔离级别也可以用命令
SET default_transaction_isolation = 'value'以及在配置文件中设置。更多信息请参考管理员指南。
兼容性
SQL92, SQL99
SERIALIZABLE 是 SQL 中的默认级别。PostgreSQL 不提供隔离级别 READ UNCOMMITTED
和 REPEATABLE READ。由于多版本并发控制,可串行化级别并非真正的可串行化。细节见用户指南。
在 SQL 中还有另外两项可以用这些命令设置的事务特性:事务是否只读以及诊断区域的大小。这两个概念在 PostgreSQL 中都不受支持。