===== BEGIN ===== .. container:: refentry :name: SQL-BEGIN .. container:: titlepage .. container:: refnamediv .. rubric:: BEGIN :name: begin BEGIN — 开始一个事务块 .. container:: refsynopsisdiv .. rubric:: 大纲 :name: 大纲 .. code:: synopsis BEGIN [ WORK | TRANSACTION ] [ transaction_mode [, ...] ] 其中 transaction_mode 是以下之一: ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED } READ WRITE | READ ONLY [ NOT ] DEFERRABLE .. container:: refsect1 :name: id-1.9.3.47.5 .. rubric:: 描述 :name: 描述 ``BEGIN``\ 开始一个事务块,也就是说所有 ``BEGIN``\ 命令之后的所有语句将被在一个 事务中执行,直到给出一个显式的\ `COMMIT `__\ 或 者\ `ROLLBACK `__\ 。默认情况下(没有 ``BEGIN``\ ), OushuDB在 “自动提交”模式中执行事务,也就是说每个语句都 在自己的事务中执行并且在语句结束时隐式地执行一次提交(如果执 行成功,否则会完成一次回滚)。 在一个事务块内的语句会执行得更快,因为事务的开始/提交也要求可观 的 CPU 和磁盘活动。在进行多个相关更改时,在一个事务内执行多个语 句也有助于保证一致性:在所有相关更新还没有完成之前,其他会话将不 能看到中间状态。 如果指定了隔离级别、读/写模式或者延迟模式,新事务也会有那些特性, 就像执行了\ `SET TRANSACTION `__\ 一样。 .. container:: refsect1 :name: id-1.9.3.47.6 .. rubric:: 参数 :name: 参数 .. container:: variablelist ``WORK`` \ ``TRANSACTION`` 可选的关键词。它们没有效果。 这个语句其他参数的含义请参考 `SET TRANSACTION `__\ 。 .. container:: refsect1 :name: id-1.9.3.47.7 .. rubric:: 注解 :name: 注解 `START TRANSACTION `__\ 具有和\ ``BEGIN`` 相同的功能。 使用\ `COMMIT `__\ 或者 `ROLLBACK `__\ 来终止一个事务块。 在已经在一个事务块中时发出\ ``BEGIN``\ 将惹出一个警告 消息。事务状态不会被影响。要在一个事务块中嵌套事务,可以使用保 存点(见\ `SAVEPOINT `__\ )。 由于向后兼容的原因,连续的 *``transaction_modes``* 之间的逗号可以被省略。 .. container:: refsect1 :name: id-1.9.3.47.8 .. rubric:: 示例 :name: 示例 开始一个事务块: .. code:: programlisting BEGIN; .. container:: refsect1 :name: id-1.9.3.47.9 .. rubric:: 兼容性 :name: 兼容性 ``BEGIN``\ 是一种 OushuDB 语言扩展。它等效于 SQL 标准的命令\ `START TRANSACTION `__\ ,它的参考页 包含额外的兼容性信息。 ``DEFERRABLE`` *``transaction_mode``* 是一种 OushuDB 语言扩展。 附带地,\ ``BEGIN``\ 关键词被用于嵌入式 SQL 中的一种 不同目的。在移植数据库应用时,我们建议小心对待事务语义。 .. container:: refsect1 :name: id-1.9.3.47.10 .. rubric:: 另见 :name: 另见 `COMMIT `__, `ROLLBACK `__, `START TRANSACTION `__, `SAVEPOINT `__