ผลของ Savepoint ต่อ Isolation Level
หลังจากที่ได้ทำความรู้จักกับ savepoint แล้ว ลองนำมาใช้ตั้งค่าชุด transaction ที่ต้องทำงานจาก snapshot ข้อมูลเริ่มต้นเดียวกัน REPEATABLE READ คือ isolation level ที่ช่วยให้ทุก statement ภายใน transaction เห็นข้อมูลชุดเดียวกับที่ statement แรกใช้ แทนที่จะเห็นข้อมูลที่เปลี่ยนแปลงไปจาก statement ก่อนหน้า
เมื่อเร็วๆ นี้ FFEIC อนุญาตให้มีการลดเงินฝากจากต่างประเทศแบบค่อยเป็นค่อยไป โดยใช้ฟิลด์ RCON2203 ในชุดข้อมูล (หน่วยเป็นพันดอลลาร์) เกณฑ์การลดใหม่คือ 35% สำหรับมากกว่า 1 พันล้านดอลลาร์, 25% สำหรับมากกว่า 500 ล้านดอลลาร์ และ 13% สำหรับมากกว่า 300 ล้านดอลลาร์ แม้จะสามารถจัดลำดับ statement เพื่อหลีกเลี่ยงการลดซ้ำได้ แต่ด้วย REPEATABLE READ แต่ละ statement จะเห็นข้อมูลก่อนการปรับเปลี่ยนใดๆ เสมอ
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Transactions and Error Handling in PostgreSQL
คำแนะนำการฝึกหัด
- เริ่มต้น transaction ด้วย
REPEATABLE READ - ลด
RCON2203ลง 35% หากมากกว่า 1 พันล้านดอลลาร์, 25% หากมากกว่า 500 ล้านดอลลาร์ หรือ 13% หากมากกว่า 300 ล้านดอลลาร์ โดยมีSAVEPOINTหลังแต่ละเงื่อนไข - ปิด transaction
- รวมผลรวมของฟิลด์
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