启动事务处理

启动事务块。

语法

START TRANSACTION [ isolation_level ]

其中,*isolation_level *是以下几项之一:

ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED }READ { ONLY | WRITE }

参数

隔离级别(在下表中介绍)确定在其他事务并发运行时某个事务可以访问的数据。首个查询 (SELECT) 或 DML 语句(INSERTDELETEUPDATE)运行后,隔离级别不能更改。

事务将保留其隔离级别直至其完成,即使在事务处理期间会话的隔离级别发生更改也是如此。Vertica 内部进程(例如

Tuple Mover

刷新操作)以及 DDL 操作始终以 SERIALIZABLE 隔离级别运行以确保一致性。

WORK | TRANSACTION
不起任何作用;它们是可选的关键字,目的是提高可读性。
ISOLATION LEVEL { | SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED }
  • SERIALIZABLE:设置最严格的 SQL 事务隔离级别。此级别连续而不是并发模拟事务。它持有锁并阻止写入操作,直到事务完成为止。对于正常的查询操作,不建议使用。
  • REPEATABLE READ:通过 Vertica 自动转换为 SERIALIZABLE。
  • READ COMMITTED(默认值):允许并发事务。将 READ COMMITTED 隔离用于正常查询操作,但请注意,两者有细微差别。有关详细信息,请参阅 事务
  • READ UNCOMMITTED:通过 Vertica 自动转换为 READ COMMITTED。
READ {WRITE | ONLY}
确定事务是读取/写入还是只读。默认值为读/写模式。

如果将事务会话模式设置为只读,将不允许使用以下 SQL 命令,但是不会阻止所有磁盘写入操作:

  • INSERT、UPDATE、DELETE 和 COPY - 如果要写入的表不是临时表
  • 所有 CREATE、ALTER 和 DROP 命令
  • GRANT、REVOKE 和 EXPLAIN - 如果要运行的命令在列出的命令当中。

特权

注意

BEGIN 执行与 START TRANSACTION 相同的功能。

示例

此示例显示如何启动事务处理。

= > START TRANSACTION ISOLATION LEVEL READ COMMITTED READ WRITE;
START TRANSACTION
=> CREATE TABLE sample_table (a INT);
CREATE TABLE
=> INSERT INTO sample_table (a) VALUES (1);
OUTPUT
--------
1
(1 row)

另请参阅