BEGIN
启动事务块。
概要
BEGIN [WORK | TRANSACTION] [transaction_mode]
其中transaction_mode是:
ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}
READ WRITE | READ ONLY
[ NOT ] DEFERRABLE
描述
BEGIN启动事务块,即BEGIN命令之后的所有语句将在单个事务中执行,
直到给出显式的COMMIT或ROLLBACK。
默认情况下(没有BEGIN),Greenplum数据库以自动提交模式执行事务,
即,每个语句在其自己的事务中执行,并且在语句末尾隐式执行提交(如果执行成功,否则回滚) 。
在事务块中,语句的执行速度更快,因为事务启动/提交需要大量的CPU和磁盘活动。 在事务中执行多个语句对于确保进行一些相关更改时的一致性也很有用: 其他会话将无法看到中间状态,其中不是所有相关更新都完成。
如果指定了隔离级别,读/写模式或可延迟模式,则新事务具有那些特征,
就像执行[SET TRANSACTION](SET_TRANSACTION.html#topic1)一样。
参数
WORK
TRANSACTION
可选关键字。它们没有作用。
SERIALIZABLE
READ COMMITTED
READ UNCOMMITTED
SQL标准定义了四个事务隔离级别:
READ UNCOMMITTED,READ COMMITTED,REPEATABLE READ和SERIALIZABLE。
READ UNCOMMITTED允许事务查看未提交的并发事务所做的更改。
在Greenplum数据库中这是不可能的,因此READ UNCOMMITTED与READ COMMITTED相同。
READ COMMITTED是Greenplum数据库中的默认隔离级别,可确保语句只能看到在开始之前提交的行。
如果在第一次执行该语句后又提交了另一个并发事务,则在一个事务中执行两次的同一条语句可能会产生不同的结果。
REPEATABLE READ隔离级别确保事务只能看到在事务开始之前提交的行。
REPEATABLE READ是Greenplum数据库支持的最严格的事务隔离级别。
由于序列化失败,必须准备使用REPEATABLE READ隔离级别的应用程序以重试事务。
SERIALIZABLE事务隔离级别确保执行多个并发事务与串行执行相同的事务产生的效果相同。
如果指定SERIALIZABLE,则Greenplum数据库将退回到REPEATABLE READ。
指定DEFERRABLE在Greenplum数据库中无效,但是支持语法以与PostgreSQL兼容。
仅当事务为READ ONLY且SERIALIZABLE,
并且Greenplum数据库不支持SERIALIAZABLE事务时,才可以推迟该事务。
注解
[START TRANSACTION](START_TRANSACTION.html#topic1)具有与BEGIN相同的功能。
使用[COMMIT](COMMIT.html#topic1)或[ROLLBACK](ROLLBACK.html#topic1)终止事务块。
如果已经在事务块中,则发出BEGIN会引起警告消息。
事务状态不受影响。
要将事务嵌套在事务块中,请使用保存点(请参见SAVEPOINT)。
示例
要开始事务块:
BEGIN;
要以可重复读隔离级别开始事务块:
BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ;
兼容性
BEGIN是Greenplum数据库语言扩展。
它等效于SQL标准命令[START TRANSACTION](START_TRANSACTION.html#topic1)。
DEFERRABLE transaction_mode是Greenplum数据库语言的扩展。
附带地,BEGIN关键字在嵌入式SQL中用于不同的目的。
建议您在移植数据库应用程序时注意事务语义。
另见
[COMMIT](COMMIT.html#topic1),
[ROLLBACK](ROLLBACK.html#topic1), [START TRANSACTION](START_TRANSACTION.html#topic1), [SAVEPOINT](SAVEPOINT.html#topic1)
Parent topic: SQL Command Reference