ระดับ Isolation และ Transaction
SERIALIZABLE คือระดับ isolation ที่จะถ่ายภาพ snapshot ของข้อมูล ณ ขณะที่มีการออก query หรือคำสั่ง update ครั้งแรก และจะเกิด error หากข้อมูลถูกเปลี่ยนแปลงจากภายนอก transaction ไม่ว่าในกรณีใดก็ตาม ทั้งนี้ transaction ยังคงสามารถทำงานอื่นได้ก่อน เช่น การประกาศตัวแปร ก่อนที่จะมีการออก query ครั้งแรก
ในแบบฝึกหัดนี้จะใช้ชุดข้อมูล FFIEC อีกครั้ง เพื่อทำงานกับข้อมูลที่การเปลี่ยนแปลงรายปีของเงินฝากออมทรัพย์ RCON0352 ได้รับผลกระทบจาก offset ขนาดใหญ่
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Transactions and Error Handling in PostgreSQL
คำแนะนำการฝึกหัด
- เริ่มต้น transaction ในโหมด
SERIALIZABLE - Update ระเบียนทั้งหมดที่
RCON0352มีค่ามากกว่า 100,000 โดยลดลง 50% COMMITtransaction- Select จำนวนระเบียนที่ยังคงมีค่า
RCON0352มากกว่า 100,000
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
-- Create a new transaction with a serializiable isolation level
___ TRANSACTION ISOLATION LEVEL ___;
-- Update records with a 50% reduction if greater than 100000
___ ffiec_reci
SET ___ = ___ * 0.5
WHERE RCON0352 > 100000;
-- Commit the transaction
___;
-- Select a count of records still over 100000
SELECT ___(RCON0352)
FROM ___
WHERE RCON0352 > 100000;