Supongo que su UPDATE
declaración en sí está verificando el lastmodified
valor que lees en tu SELECT
declaración como sugiere nueve lados.
Si lastmodified
es una DATE
, entonces existe una posible condición de carrera si hay varias actualizaciones en la misma fila en el mismo segundo desde una DATE
sólo tiene granularidad a la segunda. Si lastmodified
es un TIMESTAMP
, por otro lado, la ventana en la que puede ocurrir la condición de carrera es mucho más limitada ya que un TIMESTAMP
tendrá entre 3 y 9 dígitos de precisión de subsegundos (3 en la mayoría de las máquinas Windows, 6 en la mayoría de las máquinas Unix). Es bastante improbable, aunque no imposible, que tenga dos actualizaciones en el mismo milisegundo o incluso en el mismo microsegundo. Pero no es infalible.
Puede usar un valor generado por secuencia en lugar de una fecha de última modificación. Eso puede garantizar que no perderá una actualización ya que una secuencia NOCYCLE no devolverá el mismo valor dos veces. Pero si sigue ese camino, perderá el beneficio de la información de tener una última fecha de actualización en cada fila o almacenará algunos bytes adicionales de datos en cada fila de la tabla. Cualquiera de estas compensaciones puede valer la pena dependiendo de su aplicación o puede crear más problemas de los que resuelve.