跳到主要内容

事务管理

Goose 支持 ACID 数据库事务。 事务提供隔离性,即在事务提交之前,并发事务无法看到该事务所做的更改。 事务也可以被中止,中止后会丢弃该事务截至当前所做的所有更改。

语句

Goose 提供以下用于事务管理的语句。

开启事务

要开启事务,请执行:

BEGIN TRANSACTION;

提交事务

你可以通过提交事务,使其对其他事务可见,并将其写入持久化存储(在 Goose 以持久化模式运行时)。 要提交事务,请执行:

COMMIT;

如果当前不在活动事务中,COMMIT 语句会失败。

回滚事务

你可以中止一个事务。 该操作也称为回滚,会丢弃该事务对数据库所做的所有更改。 要中止事务,请执行:

ROLLBACK;

你也可以使用 ABORT 命令,其行为完全一致:

ABORT;

如果当前不在活动事务中,ROLLBACKABORT 语句都会失败。

隔离级别

Goose 的并发模型保证快照隔离。违反该隔离级别的事务会被中止。

示例

下面通过一个简单示例说明事务的使用。

CREATE TABLE person (name VARCHAR, age BIGINT);

BEGIN TRANSACTION;
INSERT INTO person VALUES ('Ada', 52);
COMMIT;

BEGIN TRANSACTION;
DELETE FROM person WHERE name = 'Ada';
INSERT INTO person VALUES ('Bruce', 39);
ROLLBACK;

SELECT * FROM person;

第一个事务(插入 “Ada”)已提交,而第二个事务(删除 “Ada” 并插入 “Bruce”)被中止。 因此,最终结果表中只会包含 <'Ada', 52>