SET SESSION CHARACTERISTICS AS TRANSACTION
设置在此语句发出后开始的所有事务的隔离级别和访问模式。
事务将保留其隔离级别直至其完成,即使在事务处理期间会话的隔离级别发生更改也是如此。Vertica 内部进程(例如 Tuple Mover 和 刷新操作)以及 DDL 操作始终以 SERIALIZABLE 隔离级别运行以确保一致性。
语法
SET SESSION CHARACTERISTICS AS TRANSACTION settings
- 设置
- 以下两项中的一个或两个:
-
ISOLATION LEVEL [argument](#IsolationArgs)
-
[READ ONLY | READ WRITE](#ReadWrite)
-
ISOLATION LEVEL 实参
ISOLATION LEVEL 子句用于确定当同时运行其他多个事务时,此事务可以访问的数据。如果事务已运行,则不能在第一个查询 (SELECT) 或 DML 语句(INSERT、DELETE、UPDATE)之后更改隔离级别。
将 ISOLATION LEVEL 设置为以下实参之一:
SERIALIZABLE
- 设置最严格的 SQL 事务隔离级别。此级别连续而不是并发模拟事务。它持有锁并阻止写入操作,直到事务完成为止。
使用
SERIALIZABLE
的应用程序必须准备好在序列化失败后重试事务。对于正常的查询操作,不建议使用此隔离级别。将事务隔离级别设置为
SERIALIZABLE
不会应用于临时表。临时表通过其事务范围进行隔离。 REPEATABLE READ
- 自动转换为
SERIALIZABLE
。 READ COMMITTED
- 默认值,允许并发事务。
READ UNCOMMITTED
- 自动转换为
READ COMMITTED
。
READ WRITE/READ ONLY
您可以将事务访问模式设置为以下几项之一:
READ WRITE
- 默认值,允许对 SQL 语句进行读取/写入。
READ ONLY
- 不允许需要写入权限的 SQL 语句:
-
对任何非临时表的 INSERT、UPDATE、DELETE 和 COPY 操作。
-
CREATE、ALTER 和 DROP
-
GRANT、REVOKE
-
EXPLAIN(如果要解释的 SQL 语句需要写入权限)。
注意
将事务会话模式设置为只读不会阻止所有写入操作。 -
特权
无
查看会话事务特征
SHOW TRANSACTION_ISOLATION 和 SHOW TRANSACTION_READ_ONLY 可显示当前会话的事务设置:
=> SHOW TRANSACTION_ISOLATION;
name | setting
-----------------------+--------------
transaction_isolation | SERIALIZABLE
(1 row)
=> SHOW TRANSACTION_READ_ONLY;
name | setting
-----------------------+---------
transaction_read_only | true
(1 row)