PostgreSQL 中如何使用 BEGIN、COMMIT 和 ROLLBACK?

推荐答案

在 PostgreSQL 中,BEGINCOMMITROLLBACK 是用于管理事务的关键字。事务是一组 SQL 语句的集合,这些语句要么全部成功执行,要么全部失败回滚。以下是它们的基本用法:

  • BEGIN: 用于启动一个新的事务。
  • COMMIT: 用于提交事务,使事务中的所有操作永久生效。
  • ROLLBACK: 用于回滚事务,撤销事务中的所有操作。

示例代码

-- -------------------- ---- -------
------  -- ----

-- ---- --- --
------ -------- --- ------- - ------- - --- ----- ------- - --
------ -------- --- ------- - ------- - --- ----- ------- - --

-- -----------
-------

-- -----------
---------

本题详细解读

1. BEGIN 语句

BEGIN 语句用于启动一个新的事务。在事务开始后,所有的 SQL 操作都会被视为一个整体,直到事务被提交或回滚。

2. COMMIT 语句

COMMIT 语句用于提交事务。提交后,事务中的所有操作将永久生效,数据将被写入数据库。

3. ROLLBACK 语句

ROLLBACK 语句用于回滚事务。如果在事务执行过程中发生错误,或者你决定撤销事务中的所有操作,可以使用 ROLLBACK 语句。回滚后,事务中的所有操作将被撤销,数据库将恢复到事务开始前的状态。

4. 事务的 ACID 特性

事务在 PostgreSQL 中遵循 ACID 特性:

  • 原子性 (Atomicity): 事务中的所有操作要么全部成功,要么全部失败。
  • 一致性 (Consistency): 事务执行前后,数据库的状态必须保持一致。
  • 隔离性 (Isolation): 多个事务并发执行时,每个事务都感觉不到其他事务的存在。
  • 持久性 (Durability): 一旦事务提交,其结果将永久保存在数据库中。

5. 自动提交模式

在 PostgreSQL 中,默认情况下,每条 SQL 语句都会自动提交。如果你希望手动控制事务,可以使用 BEGIN 语句显式地启动事务。

6. 嵌套事务

PostgreSQL 不支持真正的嵌套事务,但你可以使用 SAVEPOINT 来实现类似的功能。

-- -------------------- ---- -------
------
------ ---- ----- ------ ------ --------

--------- -------------
------ ---- ----- ------ ------ ------------

-- ------
-------- -- -------------

-------

在这个例子中,ROLLBACK TO my_savepoint 会撤销插入 Charlie 的操作,但保留插入 Bob 的操作。

纠错
反馈