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

Hiểu các KHÓA SQL Server trên các truy vấn CHỌN

A SELECT trong SQL Server sẽ đặt một khóa chia sẻ trên một hàng của bảng - và SELECT thứ hai cũng sẽ yêu cầu một khóa dùng chung và những khóa này tương thích với nhau.

Vì vậy, không có - một SELECT không thể chặn một SELECT khác .

Cái gì WITH (NOLOCK) gợi ý truy vấn được sử dụng để có thể đọc dữ liệu đang trong quá trình được chèn (bởi một kết nối khác) và dữ liệu đó chưa được cam kết.

Nếu không có gợi ý truy vấn đó, một SELECT có thể bị chặn đọc bảng bởi một INSERT đang diễn ra (hoặc UPDATE ) tuyên bố đặt một độc quyền khóa trên các hàng (hoặc có thể là toàn bộ bảng), cho đến khi giao dịch của hoạt động đó đã được cam kết (hoặc khôi phục).

Sự cố của WITH (NOLOCK) gợi ý là:cuối cùng thì bạn có thể đang đọc các hàng dữ liệu sẽ không được chèn vào (nếu INSERT giao dịch được khôi phục) - vì vậy ví dụ của bạn báo cáo có thể hiển thị dữ liệu chưa bao giờ thực sự được cam kết với cơ sở dữ liệu.

Có một gợi ý truy vấn khác có thể hữu ích - WITH (READPAST) . Điều này hướng dẫn SELECT lệnh chỉ bỏ qua bất kỳ hàng nào mà nó cố gắng đọc và bị khóa riêng. SELECT sẽ không chặn và nó sẽ không đọc bất kỳ dữ liệu "bẩn" nào chưa được cam kết - nhưng nó có thể bỏ qua một số hàng, ví dụ:không hiển thị tất cả các hàng của bạn trong bảng.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hiểu về Giám sát hiệu suất máy chủ SQL dựa trên đám mây

  2. Các ràng buộc có thể hoãn lại trong SQL Server

  3. Kiểm tra không gian được sử dụng bởi một bảng trong SQL Server

  4. Các hàm vô hướng ODBC cho Ngày và Giờ trong SQL Server (Ví dụ T-SQL)

  5. Lệnh Sql JOIN có ảnh hưởng đến hiệu suất không?