1.4 理解事务隔离级别

默认情况下,PostgreSQL运行在READ COMMITTED事务隔离模式中。

下面有关于事务隔离的一个例子:

SELECT
    *
FROM
    t_account ;

 id | currency_id | balance
----+-------------+---------
  1 |           1 |     100
  2 |           1 |     200
(2 rows)
事务1事务 2
BEGIN;
SELECT sum(balance) FROM t_account ;
返回300BEGIN;
INSERT INTO t_account (balance) VALUES(100);
COMMIT;
SELECT sum(balance) FROM t_account ;
返回400
COMMIT;

大部分用户实际上会期望左边的事务一直返回300,因此可以使用TRANSACTION ISOLATION LEVEL REPEATABLE READ。在这种事务隔离级别中,一个事务将在整个事务期间都使用同一个快照。

事务1事务 2
BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SELECT sum(balance) FROM t_account ;
返回300BEGIN;
INSERT INTO t_account (balance) VALUES(100);
COMMIT;
SELECT sum(balance) FROM t_account ;SELECT sum(balance) FROM t_account ;
返回300返回400
COMMIT;

可重复读并不比读已提交更昂贵,所以不需要担心性能上受到的惩罚。

读未提交不受支持,如果用户尝试开始一个读未提交的事务,PostgreSQL会把它映射成读已提交。

在读已提交和可重复读之上,PostgreSQL还提供了可序列化(SSI)事务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值