Provided by: manpages-zh_1.5.2-1_all bug

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
       可以为一个独立的事务覆盖上面的设置。

        可用的事务特性是事务隔离级别和事务访问模式(读/写或者只读)。

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

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

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

              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>