Estou assumindo que seu
UPDATE
A instrução em si está verificando o lastmodified
valor que você lê em seu SELECT
declaração como o ninesided sugere. Se
lastmodified
é uma DATE
, haverá uma possível condição de corrida se houver várias atualizações na mesma linha no mesmo segundo desde um DATE
só tem granularidade para o segundo. Se lastmodified
é um TIMESTAMP
, por outro lado, a janela na qual a condição de corrida pode ocorrer é muito mais limitada, pois um TIMESTAMP
terá entre 3 e 9 dígitos de precisão de subsegundos (3 na maioria das máquinas Windows, 6 na maioria das máquinas Unix). É bastante improvável, embora não impossível, que você tenha duas atualizações no mesmo milissegundo ou mesmo no mesmo microssegundo. Mas não é infalível. Você pode usar um valor gerado por sequência em vez de uma data da última modificação. Isso pode garantir que você não perderá uma atualização, pois uma sequência NOCYCLE não retornará o mesmo valor duas vezes. Mas se você seguir esse caminho, estará perdendo o benefício de informação de ter uma última data de atualização em cada linha ou está armazenando alguns bytes extras de dados em cada linha da tabela. Qualquer uma dessas compensações pode valer a pena dependendo do seu aplicativo ou pode criar mais problemas do que resolver.