ป้องกัน phantom reads เฉพาะบางแถว
ต้องการวิเคราะห์ข้อมูลของลูกค้าธนาคารที่มี customer_id ระหว่าง 1 ถึง 10 โดยต้องการล็อกเฉพาะแถวในตาราง customers ที่มี customer_id ระหว่าง 1 ถึง 10 เท่านั้น วิธีนี้จะรับประกันว่าไม่มีใครสามารถเปลี่ยนแปลงแถวเหล่านี้ได้ ในขณะที่ transaction อื่นยังสามารถทำงานกับส่วนที่เหลือของตารางได้
จากนั้นต้องเลือกข้อมูลลูกค้าและดำเนินการทางคณิตศาสตร์บางอย่างอีกครั้ง (ในแบบฝึกหัดนี้จะไม่เน้นรายละเอียดของการดำเนินการเหล่านั้น) หลังจากนั้น ให้เลือกลูกค้าที่มี customer_id ระหว่าง 1 ถึง 10 อีกครั้ง เพื่อยืนยันว่าข้อมูลไม่มีการเปลี่ยนแปลง
จะเขียน script นี้ได้อย่างไร?
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Transactions and Error Handling in SQL Server
คำแนะนำการฝึกหัด
- กำหนด isolation level ที่เหมาะสมเพื่อป้องกัน phantom reads
- เริ่ม transaction
- เลือกแถวของลูกค้าที่ต้องการล็อก
- Commit transaction
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
-- Set the appropriate isolation level
___ ___ ___ ___ ___
-- Begin a transaction
___ ___
-- Select customer_id between 1 and 10
SELECT *
FROM customers
___ customer_id ___ ___ AND ___;
-- After completing some mathematical operation, select customer_id between 1 and 10
SELECT *
FROM customers
___ customer_id ___ ___ AND ___;
-- Commit the transaction
___ ___