返回介绍

I. 教程

II. SQL 语言

III. 服务器管理

IV. 客户端接口

V. 服务器端编程

VI. 参考手册

VII. 内部

VIII. 附录

BEGIN

发布于 2019-09-30 03:10:29 字数 1509 浏览 1010 评论 0 收藏 0

名称

BEGIN--开始一个事务块

语法

BEGIN [ WORK | TRANSACTION ] [ transaction_mode [, ...] ]

这里的 transaction_mode 是下列之一:

    ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED }
    READ WRITE | READ ONLY

描述

BEGIN 初始化一个事务块,也就是说所有 BEGIN 命令后的用户语句都将在一个事务里面执行直到给出一个明确的 COMMITROLLBACK 。缺省时(没有 BEGIN),PostgreSQL 以"autocommit"模式执行事务,也就是说,每个语句在其自身的事务中执行,并且在语句结束的时候,如果执行成功则隐含地执行一个提交,否则执行回滚。

在事务块里执行的语句很明显地快得多,因为事务开始/提交需要大量的 CPU 和磁盘活动。在一个事务内部执行多条语句对于修改若干个相关的表的时候也是很有用的:在所有相关的更新完成之前,其它会话看不到中间的状态。

如果声明了隔离级别或者读/写模式,那么新事务将具有那些特征。就像执行了 SET TRANSACTION 一样。

参数

WORK
TRANSACTION

可选关键字,没什么作用。

参考 SET TRANSACTION 获取这个语句的其它参数的含义。

注意

START TRANSACTION 有着和 BEGIN 一样的功能。

使用 COMMITROLLBACK 结束一个事务块。

在一个现有事务块内部发出一个 BEGIN 将产生一个警告信息。事务的状态将不会被影响。要想在一个事务块里嵌套事务,请使用保存点(参见 SAVEPOINT)。

出于向下兼容考虑,在随后的 transaction_modes 之间的逗号可以忽略。

例子

开始一个事务块:

BEGIN;

兼容性

BEGIN 是 PostgreSQL 语言的扩展。等价于 SQL 标准中的 START TRANSACTION 命令,可以参考附加的兼容性信息。

顺便说一句,BEGIN 关键字在嵌入 SQL 里用于不同目的。建议你在移植数据库应用时仔细检查事务的语意。

又见

COMMIT, ROLLBACK, START TRANSACTION, SAVEPOINT

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文