あなたのUPDATE
ステートメント自体がlastmodified
を検証しています SELECT
で読み取った値 九面が示唆するように声明。
lastmodified
の場合 DATE
です 、DATE
以降、同じ秒に同じ行に複数の更新がある場合、競合状態が発生する可能性があります。 秒までの粒度しかありません。 lastmodified
の場合 TIMESTAMP
です 一方、TIMESTAMP
以降、競合状態が発生する可能性のあるウィンドウははるかに制限されます。 1秒未満の精度は3〜9桁です(ほとんどのWindowsマシンでは3桁、ほとんどのUnixマシンでは6桁)。同じミリ秒または同じマイクロ秒で2つの更新が行われる可能性はほとんどありませんが、不可能ではありません。しかし、それは間違いではありません。
最終変更日の代わりに、シーケンスで生成された値を使用できます。これにより、NOCYCLEシーケンスが同じ値を2回返さないため、更新が失われないことが保証されます。しかし、そのパスをたどると、すべての行に最終更新日があるという情報の利点が失われるか、テーブルのすべての行に数バイトの余分なデータが格納されます。アプリケーションによっては、これらのトレードオフのいずれかが価値がある場合もあれば、解決するよりも多くの問題が発生する場合もあります。