Savepoint 對隔離等級的影響
現在你已經熟悉 savepoint,來用它們建立一連串交易,且這些交易都需要從同一個資料初始快照運作。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