- Đọc bẩn : đọc dữ liệu UNCOMMITED từ một giao dịch khác
- Đọc không lặp lại : đọc dữ liệu CAM KẾT từ một
UPDATE
truy vấn từ một giao dịch khác
- Phantom đọc : đọc dữ liệu CAM KẾT từ một
INSERT
hoặcDELETE
truy vấn từ một giao dịch khác
Lưu ý : XÓA các câu lệnh từ một giao dịch khác, cũng có xác suất rất thấp gây ra các lần đọc Không lặp lại trong một số trường hợp nhất định. Nó xảy ra khi câu lệnh XÓA không may, xóa chính hàng mà giao dịch hiện tại của bạn đang truy vấn. Nhưng đây là một trường hợp hiếm gặp, và rất khó xảy ra trong cơ sở dữ liệu có hàng triệu hàng trong mỗi bảng. Các bảng chứa dữ liệu giao dịch thường có khối lượng dữ liệu cao trong bất kỳ môi trường sản xuất nào.
Ngoài ra, chúng tôi có thể quan sát rằng CẬP NHẬT có thể là một công việc thường xuyên hơn trong hầu hết các trường hợp sử dụng thay vì CHỨNG MINH hoặc XÓA (trong những trường hợp như vậy, nguy cơ đọc không lặp lại vẫn chỉ tồn tại - những trường hợp ảo không thể đọc được trong những trường hợp đó). Đây là lý do tại sao CẬP NHẬT được đối xử khác với CHERTN XÓA và kết quả dị thường cũng được đặt tên khác.
Ngoài ra còn có một chi phí xử lý bổ sung liên quan đến việc xử lý các CHERTN-XÓA, thay vì chỉ xử lý các CẬP NHẬT.
Lợi ích của các mức cô lập khác nhau
- READ_UNCOMMITTED ngăn chặn không có gì. Đó là mức cô lập bằng không
- READ_COMMITTED chỉ ngăn chặn một, tức là đọc bẩn
- REPEATABLE_READ ngăn chặn hai sự bất thường: Đọc bẩn và đọc không lặp lại
- SERIALIZABLE ngăn chặn cả ba sự bất thường: Đọc bẩn, đọc không lặp lại và đọc Phantom
Vậy thì tại sao không chỉ thiết lập giao dịch SERIALIZABLE mọi lúc? Chà, câu trả lời cho câu hỏi trên là: Cài đặt SERIALIZABLE làm cho các giao dịch rất chậm , điều mà chúng ta lại không muốn.
Trong thực tế, thời gian giao dịch tiêu thụ theo tỷ lệ sau:
SERIALIZABLE > REPEATABLE_READ > READ_COMMITTED > READ_UNCOMMITTED
Vì vậy, cài đặt READ_UNCOMMITTED là nhanh nhất .
Tóm lược
Trên thực tế, chúng ta cần phân tích trường hợp sử dụng và quyết định mức cô lập để chúng ta tối ưu hóa thời gian giao dịch và cũng ngăn ngừa hầu hết các bất thường.
Lưu ý rằng cơ sở dữ liệu theo mặc định có cài đặt REPEATABLE_READ.