Tra cứu không nhất quán (Inconsistent Retrieval)

Một phần của tài liệu Cơ sở dữ liệu (Trang 107 - 108)

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 dch T1 Giao dch 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 cp nht Sau cp nht

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:

Thi gian Giao dch Hành động Giá trCng 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.

Một phần của tài liệu Cơ sở dữ liệu (Trang 107 - 108)

Tải bản đầy đủ (PDF)

(121 trang)