SET TRANSACTION

Name

SET TRANSACTION — 设置当前SQL事务的特性
SET TRANSACTION ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE }
SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE }
  

描述

这条命令摄制事务隔离级别. SET TRANSACTION 命令为当前 SQL 事务 设置特性. 它对后面的事务没有影响. 这条命令在正在执行的事务使用了第一条DML (Data Modify Language?)语句后就不能使用了( SELECTINSERTDELETEUPDATEFETCHCOPY).) SET SESSION CHARACTERISTICS 为一个会话中的每个事务设置缺省的隔离级别. SET TRANSACTION 可以为一个独立的 事务覆盖上面的设置.

事务的隔离级别决定一个事务在同时存在其它并行运行的事务时 它能够看到什么数据.

READ COMMITTED

一条语句只能看到在它开始之前的数据.这是缺省.

SERIALIZABLE

当前的事务只能看到在这次事务第一条DML语句执行之前的数据.

小技巧: 说白了,serializable(可串行化)意味着两个事务 将把数据库保持在同一个状态,就好象这两个事务是严格地按照先后 顺序执行地那样.

兼容性

SQL92, SQL99

SERIALIZABLE 是 SQL 里面的缺省隔离级别. Postgres 并不提供 READ UNCOMMITTEDREPEATABLE READ 隔离级别. 因为我们使用了多版本并行控制,serializable(可串行化)级别 并非真的可串行化,参阅 用户手册 获取细节.

SQL 里还有两种事务特性可以用这条命令设置: 这个事务是否只读和诊断范围的大小. 这两个概念都不被Postgres支持.