開始使用免費開始

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 
編輯並執行程式碼