SQL Sever: Mức cô lập SERIALIZABLE là gì?

2022-07-04 22:03:23

Mức cô lập SERIALIZABLE là một loại phiên bản mở rộng của mức cô lập REPEATABLE READ của SQL Server.

Yesterday, I have published REPEATABLE READ in which you get the same result by executing same SELECT statement because during your reading operation other cannot update the data, but others can insert the new records.

Giờ đây, với cấp độ Cô lập SERIALIZABLE, bạn không thể sửa đổi dữ liệu trong khi một giao dịch khác đang đọc cùng một dữ liệu.
Bạn thậm chí không thể đọc dữ liệu không được cam kết.

Các giao dịch khác không thể chèn các hàng mới với các giá trị khóa sẽ nằm trong phạm vi khóa được đọc bởi bất kỳ câu lệnh nào trong giao dịch hiện tại cho đến khi giao dịch hiện tại hoàn tất.

Khóa cũng hoạt động dựa trên phạm vi giá trị khóa.
Ví dụ: bạn đang chọn dữ liệu của mình giữa ID 200 và ID 500, vì vậy tất cả dữ liệu này đã bị khóa và một giao dịch khác không thể thực hiện CHÈN hoặc CẬP NHẬT trong dữ liệu phạm vi này cho đến khi hoàn tất quá trình đọc.

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 bên dưới:

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 dữ liệu nằm trong phạm vi chính:

Kết quả là bạn không thể CẬP NHẬT dữ liệu giữa ID 2 và ID 5.

Trong thời gian trễ 15 giây, hãy mở một cửa sổ hoặc phiên truy vấn mới và cố gắng CHÈN một bản ghi nằm trong phạm vi chính:

Kết quả là bạn không thể CHÈN dữ liệu với ID 4 vì nó nằm giữa ID 2 và ID 5.

Lưu ý quan trọng: ở đây, Khóa chính là bắt buộc trên cột ID vì nếu không có khóa chính, khóa chính sẽ khóa toàn bộ bảng vì vậy giá trị phạm vi phải là Khóa chính.

Xem thêm:


Chia sẻ: