Sequence · Lost update
Hai phiên cùng cộng 100 vào số dư 1000
Hai phiên cùng cộng 100 vào số dư 1000
Phiên A và phiên B cùng đọc so_du 1000. A ghi 1100 rồi commit, B cũng ghi 1100. Ở READ COMMITTED lệnh của B thành công và ghi đè, số dư cuối 1100, mất một lần cộng mà không có lỗi. Ở REPEATABLE READ, B nhận ERROR 40001, bị huỷ, số dư vẫn 1100 và ứng dụng phải thử lại.
ALT
[READ COMMITTED]
[REPEATABLE READ]
SELECT SO_DU
1000
SELECT SO_DU
1000
UPDATE 1100 · COMMIT
UPDATE 1100
OK · GHI ĐÈ
ERROR 40001
số dư cuối 1100 · mất một lần cộng · không lỗi
B bị huỷ · số dư 1100 · ứng dụng phải thử lại
Phiên A
đọc · cộng 100 · ghi
Bảng tk
id = 1 · so_du = 1000
Phiên B
đọc · cộng 100 · ghi
CHÚ GIẢI
Lệnh gửi tới database
Kết quả trả về
Lỗi ứng dụng phải bắt và thử lại
© tiennhm