การปรับยอดสินค้าและบันทึกเหตุการณ์อยู่ใน transaction เดียวกัน แต่ขั้นหนึ่งล้มเหลวก่อน commit ควรทำอย่างไรเพื่อไม่ให้ข้อมูลสองส่วนขัดแย้งกัน?
กcommit ขั้นที่สำเร็จก่อน แล้วค่อยแก้ข้อมูลอีกส่วนด้วยงานรอบถัดไป
ขrollback ทั้ง transaction เพื่อคืนค่าทุกขั้นและไม่ยืนยันผลบางส่วน
คลบรายการใน log อย่างเดียว แล้วคงยอดสินค้าที่เปลี่ยนไว้ในตารางหลัก
งเพิ่ม lock หลังเกิดข้อผิดพลาด แล้วถือว่าการเปลี่ยนแปลงก่อนหน้าถูกยืนยันแล้ว
เฉลยอธิบาย
Transaction รวมหลายขั้นเป็นการดำเนินการแบบ all-or-nothing และ ROLLBACK ยกเลิกการเปลี่ยนแปลงทั้งหมด ดังนั้นคำตอบที่เหมาะที่สุดคือ “rollback ทั้ง transaction เพื่อคืนค่าทุกขั้นและไม่ยืนยันผลบางส่วน” ส่วนตัวลวงที่ใกล้เคียงที่สุดไม่ผ่านเพราะ การยืนยันเพียงบางขั้นทำลาย atomicity และปล่อยข้อมูลไม่สอดคล้อง