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),YMatrix 数据库以自动提交模式执行事务, 即每个语句在其自己的事务中执行,并且在语句末尾隐式执行提交(如果执行成功,否则回滚) 。

在事务块中,语句的执行速度更快,因为事务启动/提交需要大量的 CPU 和磁盘活动。 在事务中执行多个语句对于确保进行一些相关更改时的一致性也很有用: 其他会话将无法看到中间状态,其中不是所有相关更新都完成。

如果指定了隔离级别,读/写模式或可延迟模式,则新事务具有那些特征, 就像执行 SET TRANSACTION 一样。

参数

WORK

TRANSACTION

  • 可选关键字。它们没有作用。

SERIALIZABLE

READ COMMITTED

READ UNCOMMITTED

  • SQL 标准定义了四个事务隔离级别: READ UNCOMMITTED,READ COMMITTED,REPEATABLE READ 和 SERIALIZABLE。
  • READ UNCOMMITTED 允许事务查看未提交的并发事务所做的更改。 在 YMatrix 数据库中这是不可能的,因此 READ UNCOMMITTED 与 READ COMMITTED 相同。
  • READ COMMITTED 是 YMatrix 数据库中的默认隔离级别,可确保语句只能看到在开始之前提交的行。 如果在第一次执行该语句后又提交了另一个并发事务,则在一个事务中执行两次的同一条语句可能会产生不同的结果。
  • REPEATABLE READ 隔离级别确保事务只能看到在事务开始之前提交的行。 REPEATABLE READ 是 YMatrix 数据库支持的最严格的事务隔离级别。 由于序列化失败,必须准备使用 REPEATABLE READ 隔离级别的应用程序以重试事务。
  • SERIALIZABLE 事务隔离级别确保执行多个并发事务与串行执行相同的事务产生的效果相同。 如果指定SERIALIZABLE,则 YMatrix 数据库将退回到 REPEATABLE READ。
  • 指定 DEFERRABLE 在 YMatrix 数据库中无效,但是支持语法以与 PostgreSQL 兼容。 仅当事务为 READ ONLY 且 SERIALIZABLE, 并且 YMatrix 数据库不支持 SERIALIAZABLE 事务时,才可以推迟该事务。

注解

START TRANSACTION 具有与 BEGIN 相同的功能。

使用 COMMIT 或 ROLLBACK 终止事务块。

如果已经在事务块中,则发出 BEGIN 会引起警告消息。 事务状态不受影响。 要将事务嵌套在事务块中,请使用保存点(请参见 SAVEPOINT)。

示例

要开始事务块:

BEGIN;

要以可重复读隔离级别开始事务块:

BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ;

兼容性

BEGIN 是 YMatrix 数据库语言扩展。 它等效于 SQL 标准命令 START TRANSACTION。

DEFERRABLE transaction_mode 是 YMatrix 数据库语言的扩展。

附带地,BEGIN 关键字在嵌入式 SQL 中用于不同的目的。 建议您在移植数据库应用程序时注意事务语义。

另见

COMMITROLLBACK , START TRANSACTIONSAVEPOINT