The lost update problem
@ ปัญหานี้จะมีสาเหตุมาจากมี 2 transaction หรือมากกว่ามีการเรียกใช้ข้อมูลเดียวกัน และต่างฝ่ายต่างปรับปรุงค่าของข้อมูล ซึ่งอาจจะทำให้การปรับปรุงข้อมูลของฝ่ายใดฝ่ายหนึ่งสูญหายไปได้ ทำให้อีกฝ่ายได้รับข้อมูลผิดพลาด ดังเช่นตัวอย่างลำดับการทำงานของสอง transaction ต่อไปนี้
transaction "a" | time | transaction "b" |
read ค่า X ; |
t1 |
|
t2 |
read ค่า X ; |
|
X:= X+ 3 ; |
t3 |
|
t4 |
X:=X-5 ; |
สมมติว่าทั้ง 2 รายการเป็นการจองตั๋วเครื่องบินโดย 2 บริษัท a และ b โดย บริษัท a เรียกข้อมูลจำนวนที่นั่งที่เหลือ ( X ) ขึ้นมาโดยมีค่าเริ่มต้นเท่ากับ 4 ที่ และ บริษัท b ก็เรียกข้อมูลเหมือนกันในเวลา t2 ต่อมา ณ เวลา t3 บริษัท a ได้ยกเลิกการจองโดยคืนที่นั่ง 3 ที่ ทำให้ที่นั่งที่มีเหลือมีเพิ่มเป็น 7 ที่ แต่ทางบริษัท b จะได้รับข้อมูลที่ยังไม่ได้ update ก็คือ 4 ที่ นั่นก็คือเกิดปัญหา lost update ในกรณีนี้ก็จะทำให้ บริษัท b จองที่ได้ไม่เพียงพอซึ่งไม่ตรงกับความเป็นจริง