Tôi giả định rằng UPDATE
của bạn chính câu lệnh đang xác minh lastmodified
giá trị mà bạn đọc trong SELECT
của mình tuyên bố như đề xuất không có.
Nếu lastmodified
là DATE
, sau đó có một điều kiện chạy đua tiềm năng nếu có nhiều bản cập nhật cho cùng một hàng trong cùng một giây kể từ DATE
chỉ có độ chi tiết đến thứ hai. Nếu lastmodified
là một TIMESTAMP
, mặt khác, cửa sổ mà điều kiện chủng tộc có thể xảy ra bị hạn chế hơn nhiều vì TIMESTAMP
sẽ có độ chính xác dưới giây từ 3 đến 9 chữ số (3 trên hầu hết các máy Windows, 6 trên hầu hết các máy Unix). Rất khó xảy ra mặc dù không phải là không thể xảy ra rằng bạn có hai bản cập nhật ở cùng một phần nghìn giây hoặc thậm chí là cùng một phần nghìn giây. Nhưng nó không phải là sai lầm.
Bạn có thể sử dụng giá trị do trình tự tạo thay vì ngày sửa đổi cuối cùng. Điều đó có thể đảm bảo rằng bạn sẽ không mất bản cập nhật vì chuỗi NOCYCLE sẽ không trả lại cùng một giá trị hai lần. Nhưng nếu bạn đi theo con đường đó, bạn có thể mất lợi ích thông tin của việc có ngày cập nhật cuối cùng trên mỗi hàng hoặc bạn đang lưu trữ thêm một vài byte dữ liệu trong mỗi hàng của bảng. Một trong hai sự đánh đổi đó có thể đáng giá tùy thuộc vào ứng dụng của bạn hoặc có thể tạo ra nhiều vấn đề hơn so với cách giải quyết.