多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# BEGIN ## Name BEGIN -- 开始一个事务块 ## Synopsis ``` BEGIN [ WORK | TRANSACTION ] [ _transaction_mode_ [, ...] ] `_transaction_mode_`可以是以下选项之一: ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED } READ WRITE | READ ONLY [ NOT ] DEFERRABLE ``` ## 描述 `BEGIN`初始化一个事务块,也就是说所有`BEGIN`命令后的用户语句都将在一个事务里面执行直到给出一个明确的[COMMIT](#calibre_link-494)或[ROLLBACK](#calibre_link-495)。 缺省情况下(没有`BEGIN`),PostgreSQL以"autocommit"模式执行事务,也就是说,每个语句在其自身的事务中执行,并且在语句结束的时候执行了一次隐含的提交。 (如果执行成功则隐含地执行一个提交,否则执行回滚。) 在事务块里语句执行的明显快得多,因为事务开始/提交需要大量的CPU和磁盘活动。 在一个事务内部执行多条语句对于修改若干个相关的表的时候也是很有用的: 在所有相关的更新完成之前,其它会话看不到中间的状态。 如果指定了隔离级别、读/写模式或者是延迟模式,那么新事务将具有那些特征。 就像执行了[SET TRANSACTION](#calibre_link-507)一样。 ## 参数 `WORK``TRANSACTION` 可选关键字,没什么作用。 参考[SET TRANSACTION](#calibre_link-507)获取这个语句的其它参数的含义。 ## 注意 [START TRANSACTION](#calibre_link-1381)有着和`BEGIN`一样的功能。 使用[COMMIT](#calibre_link-494)或[ROLLBACK](#calibre_link-495)结束一个事务块。 在一个现有事务块内部发出一个`BEGIN`将产生一个警告信息。 事务的状态将不会被影响。 要想在一个事务块里嵌套事务,请使用保存点功能(参见[SAVEPOINT](#calibre_link-1310))。 出于向下兼容考虑,在随后的`_transaction_modes_`之间的逗号可以忽略 。 ## 例子 开始一个事务块: ``` BEGIN; ``` ## 兼容性 `BEGIN`是PostgreSQL语言的扩展。 它等价于SQL标准中的[START TRANSACTION](#calibre_link-1381)命令,在其命令的资料中包含更多有关兼容性的信息。 `DEFERRABLE``_transaction_mode_`选项是PostgreSQL的扩展。 顺便说一句,`BEGIN`关键字在嵌入SQL里用于不同目的。建议你在移植数据库应用时仔细检查事务的语意。 ## 参见 [COMMIT](#calibre_link-494), [ROLLBACK](#calibre_link-495), [START TRANSACTION](#calibre_link-1381), [SAVEPOINT](#calibre_link-1310)