Ik ga ervan uit dat uw UPDATE
statement zelf verifieert de lastmodified
waarde die u leest in uw SELECT
verklaring zoals Ninesided suggereert.
Indien lastmodified
is een DATE
, dan is er een potentiële raceconditie als er meerdere updates zijn voor dezelfde rij in dezelfde seconde sinds een DATE
heeft slechts granulariteit tot de tweede. Indien lastmodified
is een TIMESTAMP
, aan de andere kant is het venster waarin de raceconditie kan optreden veel beperkter omdat een TIMESTAMP
tussen de 3 en 9 cijfers van minder dan een seconde nauwkeurig (3 op de meeste Windows-machines, 6 op de meeste Unix-machines). Het is vrij onwaarschijnlijk, maar niet onmogelijk, dat je twee updates hebt op dezelfde milliseconde of zelfs dezelfde microseconde. Maar het is niet onfeilbaar.
U kunt een door een reeks gegenereerde waarde gebruiken in plaats van een laatste wijzigingsdatum. Dat kan garanderen dat u geen update verliest, aangezien een NOCYCLE-reeks niet twee keer dezelfde waarde retourneert. Maar als u dat pad bewandelt, verliest u ofwel het informatievoordeel van het hebben van een laatste updatedatum op elke rij, of u slaat een paar extra bytes aan gegevens op in elke rij van de tabel. Een van deze afwegingen kan de moeite waard zijn, afhankelijk van uw toepassing, of een van beide kan meer problemen veroorzaken dan het oplost.