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

Điều kiện chạy đua giữa lựa chọn và cập nhật

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 lastmodifiedDATE , 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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tạo ứng dụng Java trong Oracle JDeveloper, Phần 2

  2. Lỗi không thể tìm thấy loại hoặc không gian tên 'oracle'

  3. Truy vấn hai bảng từ các giản đồ khác nhau

  4. Cách định dạng số dưới dạng chữ số La mã trong Oracle

  5. CHỌN Dữ liệu TỪ CURSOR của GÓI, in nó