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

Làm thế nào để thực hiện một khóa hàng?

Với giả định rằng đây là máy chủ MS SQL, bạn có thể muốn UPDLOCK , có thể được kết hợp với ROWLOCK ( Gợi ý bảng ). Tôi đang gặp khó khăn khi tìm một bài báo phù hợp mô tả lý thuyết, nhưng đây là ví dụ nhanh:

SELECT id From mytable WITH (ROWLOCK, UPDLOCK) WHERE id = 1 

Câu lệnh này sẽ đặt khóa cập nhật trên hàng trong suốt thời gian của giao dịch (vì vậy điều quan trọng là phải biết khi nào giao dịch sẽ kết thúc). Vì khóa cập nhật không tương thích với các khóa riêng (yêu cầu cập nhật hồ sơ), điều này sẽ ngăn không cho bất kỳ ai cập nhật hồ sơ này cho đến khi giao dịch kết thúc.

Lưu ý rằng các quy trình khác đang cố gắng sửa đổi bản ghi này sẽ bị chặn cho đến khi giao dịch hoàn tất, tuy nhiên sẽ tiếp tục với bất kỳ thao tác ghi nào mà họ yêu cầu sau khi giao dịch kết thúc (trừ khi chúng bị hết thời gian chờ hoặc bị hủy do quá trình bị khóa). Nếu bạn muốn ngăn chặn điều này thì các quy trình khác của bạn cần sử dụng các gợi ý bổ sung để hủy bỏ nếu phát hiện thấy khóa không tương thích hoặc bỏ qua bản ghi nếu khóa đã thay đổi.

Ngoài ra, Bạn không nên sử dụng phương pháp này để khóa bản ghi trong khi chờ người dùng nhập . Nếu đây là ý định của bạn thì thay vào đó bạn nên thêm một số loại cột "đang được sửa đổi" vào bảng của mình.

Các cơ chế khóa máy chủ SQL thực sự chỉ thích hợp để sử dụng để bảo toàn tính toàn vẹn của dữ liệu / ngăn chặn tình trạng bế tắc - các giao dịch nói chung nên được giữ càng ngắn càng tốt và chắc chắn sẽ không được duy trì trong khi chờ người dùng nhập.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi:Không thể lồng nhau câu lệnh INSERT EXEC. và Không thể sử dụng câu lệnh ROLLBACK trong câu lệnh INSERT-EXEC. Làm thế nào để giải quyết điều này?

  2. Các ký tự không phải số trả về số dương khi sử dụng ISNUMERIC () trong SQL Server

  3. Crystal Report hiển thị văn bản HTML, nhưng các dấu đầu dòng không hiển thị. Tại sao?

  4. Làm cách nào để xem các kết nối SQL Server đang hoạt động?

  5. Lượt xem được lập chỉ mục và Kết hợp bên trái một lần và mãi mãi