Tra cứu không nhất quán xuất hiện khi một giao dịch thực hiện việc thống kê, tổng hợp dữ liệu dựa trên các hàm mẫu trong khi các giao dịch khác đang thực hiện cập nhật dữ liệu. Vấn đề là, giao dịch có thể đọc một số dữ liệu trước và sau khi chúng bị thay đổi giá trị, vì vậy kết quả đưa ra là không chính xác.
Để minh hoạ cho vấn đề này ta xem xét ví dụ sau:
- Giao dịch T1 thực hiện việc tính tổng số dư của các tài khoản tiền gửi,
- Tại cùng thời điểm, giao dịch T2 thực hiện việc chuyển 50$ từ tài khoản X sang tài khoản Y.
Hai giao dịch trên được thể hiện bởi các câu lệnh SQL như sau:
Giao dịch T1 Giao dịch T2
BEGIN TRANSACTION; SELECT SUM(Sodu)
FROM TAIKHOAN
UPDATE TAIKHOAN SET Sodu = Sodu - 50 WHERE Sotaikhoan = X UPDATE TAIKHOAN
SET Sodu = Sodu + 50 WHERE Sotaikhoan = Y COMMIT;
Giả sử giá trị ban đầu và giá trị sau khi cập nhật được phản ánh như sau :
Trước cập nhật Sau cập nhật
Sotaikhoan Sodu Sodu
O 100 100
X 200 (200-50) →→→→150 Y 150 (150+50)→→→→200
Z 200 200
Tình trạng tra cứu không nhất quán có thể xảy ra, nếu việc tra cứu T1 diễn ra đồng thời với giao dịch T2 như sau:
Thời gian Giao dịch Hành động Giá trị Cộng 1 T1 Đọc Sodu với Sotaikhoan = O 100 100 2 T2 Đọc Sodu với Sotaikhoan = X 200 3 T2 Sodu = 200 - 50
4 T2 Ghi Sodu với Sotaikhoan = X 150
5 T1 Đọc Sodu với Sotaikhoan = X 150 250 (sau) 6 T1 Đọc Sodu với Sotaikhoan = Y 150 400(trước) 7 T2 Đọc Sodu với Sotaikhoan = Y 150
8 T2 Sodu = 150 + 50
9 T2 GhiSodu với Sotaikhoan = Y 200 10 T2 Hoàn thành
11 T1 Đọc Sodu với Sotaikhoan = Z 200 600
Ta thấy rằng kết quả đưa ra (600) là không đúng, kết quả đúng phải là 650.