首页 > 代码库 > postgresql事务的操作二
postgresql事务的操作二
参照网页: http://www.php100.com/manual/PostgreSQL8/sql-set-transaction.html
show transaction isolation level ; 查看事务隔离级别
testdb=# show transaction isolation level;
transaction_isolation
-----------------------
read committed
(1 行记录)
testdb=> set transaction isolation level read uncommitted;
SET
-----
设置的时候需要当前有事务,如果没有事务是会立即结束,没有任何为效果;
----
SET TRANSACTION 命令为当前事务设置特性。 它对后面的事务没有影响。
SET SESSION CHARACTERISTICS 为一个会话中随后的每个事务设置缺省的隔离级别。
这些缺省可以被 SET TRANSACTION 为一个独立的事务覆盖。
可用的事务特性是事务隔离级别和事务访问模式(读/写或者只读)。
事务的隔离级别决定一个事务在同时存在其它并行运行的事务时它能够看到什么数据。
READ COMMITTED
一条语句只能看到在它开始之前的数据。这是缺省。
SERIALIZABLE
当前的事务中的所有语句只能看到在这次事务第一条查询或者修改数据的语句执行之前的数据。
SQL 标准还定义了另外两个级别,READ UNCOMMITTED 和 REPEATABLE READ。
在 PostgreSQL 里 READ UNCOMMITTED 被当作 READ COMMITTED, 而 REPEATABLE READ 当作 SERIALIZABLE 看待。
事务访问模式决定事务是读/写还是只读。读/写是缺省。如果一个 事务是只读,而且写入的表不是临时表,那么下面的 SQL 命令是不允许的:INSERT, UPDATE,DELETE,和 COPY TO; 而所有的 CREATE,ALTER,和 DROP 命令; COMMENT,GRANT,REVOKE, TRUNCATE;和 EXPLAIN ANALYZE 和EXECUTE 都不允许。这是一个高层次的只读概念,它并不阻止所有对磁盘的写入
SET TRANSACTION transaction_mode [, ...]
SET SESSION CHARACTERISTICS AS TRANSACTION transaction_mode [, ...]
这里的 transaction_mode 是下列之一:
ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED } 事务隔离级别
READ WRITE | READ ONLY 事务访问模式
注意:
1,如果执行 SET TRANSACTION 之前没有执行 START TRANSACTION 或者 BEGIN,那么它会显得没有效果一样,因为事务将立即结束。
2,我们可以用在 BEGIN 或者 START TRANSACTION 里面声明所需要的 transaction_modes 的方法来避免使用 SET TRANSACTION。
begin 中有参数设置事务隔离级别;。。。
3,会话的缺省事务隔离级别也可以通过设置配置参数default_transaction_isolation 和 default_transaction_read_only 的方法来设置。 (实际上 SET SESSION CHARACTERISTICS 只是一个用 SET 来设置这些参数的冗长等效物。) 这就意味着缺省值可以通过 ALTER DATABASE,在配置文件里等方法设置。
也就是事务隔离级别还可以设置到数据库的定义上面;
------