事务管理
Goose 支持 ACID 数据库事务。 事务提供隔离性,即在事务提交之前,并发事务无法看到该事务所做的更改。 事务也可以被中止,中止后会丢弃该事务截至当前所做的所有更改。
语句
Goose 提供以下用于事务管理的语句。
开启事务
要开启事务,请执行:
BEGIN TRANSACTION;
提交事务
你可以通过提交事务,使其对其他事务可见,并将其写入持久化存储(在 Goose 以持久化模式运行时)。 要提交事务,请执行:
COMMIT;
如果当前不在活动事务中,COMMIT 语句会失败。
回滚事务
你可以中止一个事务。 该操作也称为回滚,会丢弃该事务对数据库所做的所有更改。 要中止事务,请执行:
ROLLBACK;
你也可以使用 ABORT 命令,其行为完全一致:
ABORT;
如果当前不在活动事务中,ROLLBACK 和 ABORT 语句都会失败。
隔离级别
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>。