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

Cách khóa riêng một hàng ngăn hoạt động CRUD

BEGIN TRAN

    SELECT 1
    FROM Table
    WITH (XLOCK, ROWLOCK)

COMMIT TRAN

Điều đó sẽ thực hiện thủ thuật.

CHỈNH SỬA

Như những người khác đã lưu ý, bạn không thể khóa một hàng để không được đọc . Cách duy nhất tôi biết để làm điều này là như sau:

WITH (UPDLOCK, TABLOCK)

Và điều này giả sử rằng một WITH (NOLOCK) không bao giờ được sử dụng trong câu lệnh SELECT (dù sao thì điều này cũng nên tránh).

Tôi đã thử nghiệm điều này và nó sẽ hoạt động, mặc dù TABLOCK chỉ nên được sử dụng trong những trường hợp cực đoan. Chắc chắn nếu yêu cầu đồng thời, đó là một giải pháp tồi và một số hình thức khóa khác sẽ là cần thiết. Một cách là cập nhật một cột bit "Có sẵn Đúng / Sai" và chỉ đọc các hàng có Sẵn =Đúng. Như @gbn đã đề xuất, READPAST có thể được sử dụng với cái này.



  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 1 hàng trên cùng của mỗi nhóm

  2. Sắp xếp tự nhiên với SQL Server

  3. Chọn các giá trị riêng biệt từ 1 cột

  4. Nhóm hàng theo tổng của cột cụ thể bằng Giá trị cụ thể

  5. Tạo bảng trong SQL Server (T-SQL)