เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

ป้องกัน 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
___ ___
แก้ไขและรันโค้ด