Tính độc quyền của X
khóa so với U
ổ khóa
Trong ma trận khả năng tương thích của khóa bên dưới, có thể thấy rằng X
khóa chỉ tương thích với sự ổn định của lược đồ và các loại khóa Chèn Phạm vi-Null. U
tương thích với các loại khóa chia sẻ bổ sung sau đây S
/ IS
/ RS-S
/ RI-S
/ RX-S
khóa ma trận tương thích http://i.msdn.microsoft.com/ms186396.LockConflictTable(en-us,SQL.105).gif
Mức độ chi tiết của X
ổ khóa
Chúng được thực hiện tốt ở tất cả các cấp. Dấu vết tập lệnh và đoạn mã bên dưới chứng tỏ chúng đã được lấy ra thành công ở cấp hàng.
CREATE TABLE test_table (id int identity(1,1) primary key, col char(40))
INSERT INTO test_table
SELECT NEWID() FROM sys.objects
select * from test_table with (rowlock,XLOCK) where id=10
Nhưng vẫn có thể đọc các hàng!
Nó chỉ ra rằng tại read committed
mức cô lập Máy chủ SQL sẽ không phải lúc nào cũng lấy ra S
khóa, nó sẽ bỏ qua bước này nếu không có nguy cơ đọc dữ liệu không được cam kết mà không có chúng. Điều này có nghĩa là không có gì đảm bảo sẽ xảy ra xung đột khóa.
Tuy nhiên, nếu lựa chọn ban đầu là with (paglock,XLOCK)
thì cái này sẽ dừng giao dịch đọc dưới dạng X
khóa trên trang sẽ chặn IS
khóa trang mà người đọc sẽ luôn cần đến. Điều này tất nhiên sẽ có tác động đến tính đồng thời.
Những lưu ý khác
Ngay cả khi bạn khóa hàng / trang, điều này không có nghĩa là bạn chặn tất cả các quyền truy cập vào hàng đó trong bảng. Việc khóa một hàng trong chỉ mục được phân nhóm sẽ không ngăn các truy vấn đọc dữ liệu từ hàng tương ứng trong một chỉ mục không được phân nhóm bao trùm.