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

Nhận được khóa bảng cập nhật khi bắt đầu quy trình đã lưu trữ trong SQL Server

Bạn đã nói:

Bạn chỉ cần một khóa đọc được chia sẻ trong suốt thời gian của TXN. Điều này có nghĩa là không có quy trình nào khác có thể nhận được khóa "ghi", kết hợp với KHÓA TABLOCK. Và bạn cũng không cần COUNT.

...
   BEGIN TRANSANCTION
     SELECT TOP 1 KeyCol FROM TheTable WITH (TABLOCK, HOLDLOCK)
...

Tại sao bạn nghĩ bạn muốn có KHÓA CẬP NHẬT?

HOLDLOCK hoặc SERIALIZABLE

Chỉnh sửa, sau khi nhận xét:

  • "khóa độc quyền" có nghĩa là "chỉ một quy trình sử dụng dữ liệu".
  • "SERIALIZABLE" về cơ bản có nghĩa là giữ khóa (dùng chung, độc quyền, bất cứ thứ gì) lâu hơn nữa.

Bạn không thể chỉ định "khóa độc quyền" cho phép các quy trình khác đọc. Các khái niệm loại trừ lẫn nhau. Bạn muốn ngăn ghi vào toàn bộ bảng, điều này vẫn tồn tại khóa chia sẻ / đọc sẽ làm. Đây là lúc SERIALIZABLE xuất hiện.

Từ "Chế độ khóa"

Vì vậy:khóa được chia sẻ không cho phép ghi và có thể được duy trì bằng cách đặt nó ở trạng thái SERIALIZABLE



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cập nhật tất cả trừ một bản ghi trùng lặp trong bảng trong SQL Server

  2. 5 tính năng hàng đầu mà Nền tảng giám sát hiệu suất cơ sở dữ liệu SQL Server của bạn cần cung cấp

  3. Sao chép Sql Server yêu cầu tên máy chủ thực tế để tạo kết nối với máy chủ

  4. Tôi có cần sử dụng khối try..catch và khôi phục rõ ràng trong quy trình SQL Server không?

  5. Tạo mặt nạ dữ liệu động trong SQL Server cho người dùng nâng cao