Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Có thể buộc khóa mức hàng trong SQL Server không?

Bạn có thể sử dụng gợi ý ROWLOCK, nhưng AFAIK SQL có thể quyết định báo cáo nếu nó sắp hết tài nguyên

Từ doco:

ROWLOCK Chỉ định rằng khóa hàng được thực hiện khi khóa trang hoặc bảng được thực hiện bất thường. Khi các giao dịch được chỉ định hoạt động ở mức SNAPSHOTisolation, các khóa hàng sẽ không được thực hiện trừ khi ROWLOCK được kết hợp với các gợi ý bảng khác yêu cầu khóa, chẳng hạn như UPDLOCK và HOLDLOCK.

Gợi ý khóa ROWLOCK, UPDLOCK và XLOCK để có được các khóa cấp độ hàng có thể gắn trên các khóa chỉ mục hơn là các hàng dữ liệu thực tế. Ví dụ:nếu atable có chỉ mục không bao gồm và câu lệnh aSELECT sử dụng gợi ý khóa được xử lý bởi chỉ mục bao trùm, thì một khóa được yêu cầu trên khóa chỉ mục trong chỉ mục bao phủ chứ không phải trên phím dữ liệu trong bảng cơ sở.

Và cuối cùng, điều này đưa ra một lời giải thích khá sâu về khóa leo thang trong SQL Server 2005 đã được thay đổi trong SQL Server 2008.

Ngoài ra, còn rất chuyên sâu:Khóa trong Công cụ cơ sở dữ liệu (trong sách trực tuyến)

Vì vậy, nói chung

UPDATE
Employees WITH (ROWLOCK)
SET Name='Mr Bean'
WHERE Age>93

Sẽ ổn, nhưng tùy thuộc vào chỉ mục và tải trên máy chủ, nó có thể dẫn đến tình trạng khóa trang.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhận quyền thực thi đối với xp_cmdshell

  2. Làm cách nào để kết nối với MS SQL Server bằng cách sử dụng Inno Setup?

  3. Tìm kiếm tất cả các bảng, tất cả các cột cho một giá trị SQL Server cụ thể

  4. 5 cách tìm hàng có chứa chữ hoa trong SQL Server

  5. Phương pháp hay nhất là chèn SQL Server nếu không tồn tại