START TRANSACTION

START TRANSACTION

启动事务块。

概要

START TRANSACTION [transaction_mode] [READ WRITE | READ ONLY]

其中transaction_mode是:

ISOLATION LEVEL {SERIALIZABLE | READ COMMITTED | READ UNCOMMITTED}

描述

START TRANSACTION开始一个新的事务块。 如果指定了隔离级别或读/写模式,则新事务具有那些特征, 就像执行SET TRANSACTION一样。 这与BEGIN命令相同。

参数

READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ
SERIALIZABLE
SQL标准定义了四个事务隔离级别: READ UNCOMMITTEDREAD COMMITTEDREPEATABLE READSERIALIZABLE
READ UNCOMMITTED允许事务查看未提交的并发事务所做的更改。 在Greenplum数据库中这是不可能的,因此READ UNCOMMITTEDREAD COMMITTED相同。
READ COMMITTED是Greenplum数据库中的默认隔离级别,可确保语句只能看到在其开始之前提交的行。 如果在第一次执行该语句后又提交了另一个并发事务,则在一个事务中执行两次的同一条语句可能会产生不同的结果。
REPEATABLE READ隔离级别确保事务只能看到在事务开始之前提交的行。 REPEATABLE READ是Greenplum数据库支持的最严格的事务隔离级别。 由于可串行化失败,必须准备使用REPEATABLE READ隔离级别的应用程序以重试事务。
SERIALIZABLE事务隔离级别确保执行多个并发事务与串行运行这些事务产生相同的效果。 如果指定SERIALIZABLE,则Greenplum数据库将退回到REPEATABLE READ
READ WRITE
READ ONLY
确定事务是读/写还是只读。 读/写是默认设置。 当事务为只读时,不允许使用以下SQL命令:INSERTUPDATEDELETECOPY FROM(如果要写入的表不是临时表); 所有的CREATEALTERDROP命令; GRANTREVOKETRUNCATE; 如果EXPLAIN ANALYZEEXECUTE将要执行的命令在上述命令之中,也不被允许。 和EXPLAIN ANALYZE和EXECUTE,如果它们将要执行的命令在列出的命令之中。

示例

启动一个事务块:

START TRANSACTION;

兼容性

在标准中,不必发出START TRANSACTION来启动事务块:任何SQL命令都隐式地开始一个块。 Greenplum数据库行为可以看作是在每个不遵循START TRANSACTION(或BEGIN)的命令之后隐式发出COMMIT,因此通常被称为“自动提交”。 其他关系数据库系统可能会提供便利的自动提交功能。

SQL标准要求连续的transaction_modes之间使用逗号,但是由于历史原因,Greenplum数据库允许省略逗号。

另请参阅SET TRANSACTION的兼容性部分。