Предполагам, че вашата UPDATE
самият оператор проверява lastmodified
стойност, която сте прочели във вашия SELECT
твърдение, както предполага ninesided.
Ако lastmodified
е DATE
, тогава има потенциално състояние на състезание, ако има множество актуализации на един и същи ред в една и съща секунда след DATE
има детайлност само към второто. Ако lastmodified
е TIMESTAMP
, от друга страна, прозорецът, в който може да възникне условието за състезание, е много по-ограничен, тъй като TIMESTAMP
ще има между 3 и 9 цифри с точност под секунди (3 на повечето Windows машини, 6 на повечето Unix машини). Малко вероятно е, но не и невъзможно, да имате две актуализации в една и съща милисекунда или дори в една и съща микросекунда. Но не е безпогрешен.
Можете да използвате стойност, генерирана от последователност, вместо дата на последна промяна. Това може да гарантира, че няма да загубите актуализация, тъй като последователността на NOCYCLE няма да върне една и съща стойност два пъти. Но ако тръгнете по този път, вие или губите информационното предимство да имате последна актуална дата на всеки ред, или съхранявате няколко допълнителни байта данни във всеки ред на таблицата. Всеки от тези компромиси може да си струва в зависимост от вашето приложение или може да създаде повече проблеми, отколкото да ги разреши.