保存点对隔离级别的影响
您已经了解了保存点,接下来用它们来设置一系列事务,这些事务都需要基于同一个数据快照运行。REPEATABLE READ 是一种隔离级别,它让事务中的每条语句都看到与第一条语句相同的数据,而不是前一条语句执行后的结果数据。
最近,FFEIC 允许在数据集中逐步削减境外存款(字段 RCON2203,单位为千美元)。新的削减比例为:超过 $1 billion 的削减 35%,超过 $500 million 的削减 25%,超过 $300 million 的削减 13%。通过合理排序这些语句可以避免对同一数据多次削减。然而,在 REPEATABLE READ 下,各语句看到的都是调整前的数据。
本练习是课程的一部分
PostgreSQL 中的事务与错误处理
练习说明
- 启动一个
REPEATABLE READ事务。 - 对于
RCON2203:若超过 $1 billion 则减少 35%,若超过 $500 million 则减少 25%,若超过 $300 million 则减少 13%,并在每一步后设置一个SAVEPOINT。 - 关闭事务。
- 汇总
RCON2203字段的总计。
交互式实操练习
通过完成这段示例代码来试试这个练习。
-- Create a new transaction with a repeatable read isolation level
___ TRANSACTION ISOLATION LEVEL ___ ___;
-- Update records with a 35% reduction if greater than 1000000000
UPDATE ffiec_reci
SET ___ = CAST(___ AS FLOAT) * .65
WHERE CAST(RCON2203 AS FLOAT) > 1000000000;
___ million;
-- Update records with a 25% reduction if greater than 500000000
UPDATE ___
___ ___ = CAST(___ AS FLOAT) * .75
___ CAST(RCON2203 AS FLOAT) ___ 500000000;
SAVEPOINT five_hundred;
-- Update records with a 13% reduction if greater than 300000000
___ ffiec_reci
___ ___ = CAST(___ AS FLOAT) * .87
___ CAST(___ AS FLOAT) ___ 300000000;
SAVEPOINT three_hundred;
-- Commit the transaction
___;
-- Select SUM the RCON2203 field
SELECT ___(CAST(RCON2203 AS FLOAT))
FROM ffiec_reci