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.