The temporary update ( or dirty read ) problem
@ ปัญหานี้สาเหตุเกิดจากมี transaction เกิดปัญหาในระหว่างการทำงาน เป็นเหตุให้ต้องยกเลิกการเปลี่ยนแปลงทั้งหมดที่เกิดจากรายการนี้ และหากมี transaction อื่นได้อ่านค่าที่เกิดจากการเปลี่ยนแปลงนั้นไปใช้ transaction นั้นก็จะได้ค่าที่ไม่ถูกต้องไป ตัวอย่างเช่นลำดับการทำงานของ สอง transaction ต่อไปนี้
transaction "a" |
time | transaction "b" |
read ค่า X; X:= X + 3; |
t1 |
|
t2 |
read ค่า X; |
|
read ค่า y; (transaction fail) ทำให้เกิดการ rollback |
t3 |
สมมติว่าค่า X เริ่มต้น = 4 จะเห็นว่าเมื่อ transaction a เกิดการ rollback ส่งผลให้ค่า X กลับเป็นค่าเดิม แต่ transaction b ได้ค่า X ที่เท่ากับ 7 ไป ( 4 + 3 ) ซึ่งเป็นค่าที่ผิด ( dirty data ) ซึ่งก็คือปัญหา temporary update หรือ dirty read นั่นเอง