Saya berasumsi bahwa UPDATE
your Anda pernyataan itu sendiri sedang memverifikasi lastmodified
nilai yang Anda baca di SELECT
pernyataan sebagai sembilan sisi menyarankan.
Jika lastmodified
adalah DATE
, maka ada kondisi balapan potensial jika ada beberapa pembaruan pada baris yang sama dalam detik yang sama sejak DATE
hanya memiliki granularitas ke yang kedua. Jika lastmodified
adalah TIMESTAMP
, di sisi lain, jendela di mana kondisi balapan dapat terjadi jauh lebih terbatas karena TIMESTAMP
akan memiliki antara 3 dan 9 digit presisi sub-detik (3 pada sebagian besar mesin Windows, 6 pada sebagian besar mesin Unix). Sangat tidak mungkin meskipun bukan tidak mungkin Anda memiliki dua pembaruan pada milidetik yang sama atau bahkan mikrodetik yang sama. Tapi itu tidak sempurna.
Anda dapat menggunakan nilai yang dihasilkan urutan alih-alih tanggal modifikasi terakhir. Itu dapat menjamin bahwa Anda tidak akan kehilangan pembaruan karena urutan NOCYCLE tidak akan mengembalikan nilai yang sama dua kali. Tetapi jika Anda menempuh jalur itu, Anda akan kehilangan manfaat informasi karena memiliki tanggal pembaruan terakhir di setiap baris atau Anda menyimpan beberapa byte data tambahan di setiap baris tabel. Salah satu dari pertukaran itu mungkin sepadan, tergantung pada aplikasi Anda atau mungkin menimbulkan lebih banyak masalah daripada penyelesaiannya.