SET TRANSACTION

Name

SET TRANSACTION -- 设置当前事务的特性

Synopsis

SET TRANSACTION ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE }
SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL
	{ READ COMMITTED | SERIALIZABLE }
  

描述

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

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

READ COMMITTED

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

SERIALIZABLE

当前的事务只能看到在这次事务第一条查询或者修改数据的语句执行之前的数据.

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

兼容性

会话的缺省事务隔离级别也可以用命令

SET default_transaction_isolation = 'value'

以及在配置文件里设置. 参考管理员手册获取更多信息.

兼容性

SQL92, SQL99

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

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