การปรับยอดสินค้าและบันทึกเหตุการณ์อยู่ใน transaction เดียวกัน แต่ขั้นหนึ่งล้มเหลวก่อน commit ควรทำอย่างไรเพื่อไม่ให้ข้อมูลสองส่วนขัดแย้งกัน?

commit ขั้นที่สำเร็จก่อน แล้วค่อยแก้ข้อมูลอีกส่วนด้วยงานรอบถัดไป
rollback ทั้ง transaction เพื่อคืนค่าทุกขั้นและไม่ยืนยันผลบางส่วน
ลบรายการใน log อย่างเดียว แล้วคงยอดสินค้าที่เปลี่ยนไว้ในตารางหลัก
เพิ่ม lock หลังเกิดข้อผิดพลาด แล้วถือว่าการเปลี่ยนแปลงก่อนหน้าถูกยืนยันแล้ว

เฉลยอธิบาย

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

ข้อสอบอื่นในวิชาความรู้เกี่ยวกับระบบฐานข้อมูล (Database System) และ ระบบการบริหารจัดการข้อมูล (Database Management System)

ดูข้อสอบวิชานี้ทั้งหมด →