SQL Server: Mức cách ly REPEATABLE READ là gì?

2022-07-04 22:03:26

REPEATABLE READ cho phép bạn đọc lặp lại cùng một dữ liệu và nó đảm bảo rằng bất kỳ giao dịch nào cũng không thể cập nhật dữ liệu này cho đến khi bạn hoàn thành việc đọc của mình.
Nếu bạn đang chọn cùng một hàng hai lần trong một giao dịch, bạn sẽ nhận được cùng một kết quả cả hai lần.

Nếu ai đó đang sửa đổi dữ liệu, bạn thậm chí không thể đọc những dữ liệu đó cho đến khi họ hoàn thành cập nhật.
Điều này rất giống với mức cách ly READ COMMITTED.

REPEATABLE READ đưa ra các khóa được chia sẻ trên tất cả các câu lệnh trong giao dịch.
Các khóa chia sẻ không phát hành khóa ở mỗi cấp sao kê, nhưng nó áp dụng ở cấp giao dịch.

REPEATABLE READ không ngừng chèn các bản ghi mới hơn để khi chúng tôi đang đọc dữ liệu với mức cô lập này, sẽ có cơ hội nhận được Phantom hoặc Dirty Reads.

Ví dụ,
Bạn đang chọn dữ liệu phạm vi giữa ID 200 và ID 500 và trong phạm vi này, chúng tôi có một ID miễn phí là 394.

Bây giờ người dùng sẽ chèn một bản ghi mới với ID 394 và bạn đang chọn dữ liệu từ nhiều nguồn, vì vậy có cơ hội nhận được các kết quả khác nhau cho cả hai câu lệnh SELECT của bạn.

Giống như một tập dữ liệu có ID 394 và tập dữ liệu khác có thể không có ID 394.

Bây giờ, hãy kiểm tra mức độ cô lập REPEATABLE READ:

Đầu tiên, tạo một bảng với dữ liệu mẫu:

Mở cửa sổ hoặc phiên truy vấn mới và thực thi tập lệnh này:

Trong thời gian trễ 15 giây, hãy mở cửa sổ hoặc phiên truy vấn mới và cố gắng CẬP NHẬT bảng này:

Bây giờ, bạn không thể CẬP NHẬT dữ liệu vì nó đã được một phiên khác sử dụng.

Xem thêm:


Chia sẻ: