START TRANSACTION
START TRANSACTION¶
启动事务块。
- 语法
- ``` sql
START TRANSACTION [transaction_mode] [READ WRITE | READ ONLY]
其中`transaction_mode`是: ``` sql ISOLATION LEVEL {SERIALIZABLE | READ COMMITTED | READ UNCOMMITTED}
- 描述
START TRANSACTION
开始一个新的事务块。 如果指定了隔离级别或读/写模式,则新事务具有那些特征, 就像执行SET TRANSACTION
一样。 这与BEGIN
命令相同。- 参数
-
该SQL命令参数说明见下
READ UNCOMMITTED
|READ COMMITTED
|REPEATABLE READ
|SERIALIZABLE
-
SQL标准定义了四个事务隔离级别:
READ UNCOMMITTED
,READ COMMITTED
,REPEATABLE READ
和SERIALIZABLE
。READ UNCOMMITTED
允许事务查看未提交的并发事务所做的更改。 在SeaboxMPP数据库中这是不可能的,因此READ UNCOMMITTED
与READ COMMITTED
相同。READ COMMITTED
是SeaboxMPP数据库中的默认隔离级别,可确保语句只能看到在其开始之前提交的行。如果在第一次执行该语句后又提交了另一个并发事务,则在一个事务中执行两次的同一条语句可能会产生不同的结果。REPEATABLE READ
隔离级别确保事务只能看到在事务开始之前提交的行。REPEATABLE READ
是SeaboxMPP数据库支持的最严格的事务隔离级别。 由于可串行化失败,必须准备使用REPEATABLE READ
隔离级别的应用程序以重试事务。SERIALIZABLE
事务隔离级别确保执行多个并发事务与串行运行这些事务产生相同的效果。如果指定
SERIALIZABLE
,则SeaboxMPP数据库将退回到REPEATABLE READ
。 READ WRITE
|READ ONLY
-
确定事务是读/写还是只读。 读/写是默认设置。
当事务为只读时,不允许使用以下SQL命令:
INSERT
,UPDATE
,DELETE
和COPY FROM
(如果要写入的表不是临时表); 所有的CREATE
,ALTER
和DROP
命令;GRANT
,REVOKE
,TRUNCATE
; 如果EXPLAIN ANALYZE
和EXECUTE
将要执行的命令在上述命令之中,也不被允许。 和EXPLAIN ANALYZE和EXECUTE,如果它们将要执行的命令在列出的命令之中。
- 示例
-
启动一个事务块:
START TRANSACTION;
- 兼容性说明
-
在标准中,不必发出
START TRANSACTION
来启动事务块:任何SQL命令都隐式地开始一个块。SeaboxMPP数据库行为可以看作是在每个不遵循START TRANSACTION
(或BEGIN
)的命令之后隐式发出COMMIT
,因此通常被称为“自动提交”。其他关系数据库系统可能会提供便利的自动提交功能。SQL标准要求连续的
transaction_modes
之间使用逗号,但是由于历史原因,SeaboxMPP数据库允许省略逗号。另请参阅
SET TRANSACTION
的兼容性部分。 - 相关SQL命令
BEGIN
,SET TRANSACTION