Hoe kan ik het volgende het beste oplossen? Ik heb een database tabel waaruit ik een record selecteer (bij elke page hit). Die heeft een kolom/veld last_update dat de tijd bevat dat de laatste update is uitgevoerd voor dat record. Een "update" moet bv elk uur gebeuren, en de actie die dan ondernomen wordt is dat er in een andere tabel een record ge-insert wordt, gekoppeld aan dit record.
Dus in pseudo iets als:
select last_update, id from TableXXX where xxx
if (time() - last_update > 1 hour) {
insert into TableYYY values(xx, yy, zz, id)
update last_update = NOW()
}
Dit kan fout gaan als er twee tegelijk bezig zijn. Die halen allebei last_update op, zien dat het nodig is, inserten dan allebei een record, en updaten de last_update. Resultaat is twee updates ipv eentje. Dit lijkt me een veel voorkomend probleem. Hoe los ik dat het beste op, op een zo snel mogelijke manier. Ik lock bijvoorbeeld liever niet ook alle updates van andere records globaal. Kan het in een enkele atomic query?
Dus in pseudo iets als:
select last_update, id from TableXXX where xxx
if (time() - last_update > 1 hour) {
insert into TableYYY values(xx, yy, zz, id)
update last_update = NOW()
}
Dit kan fout gaan als er twee tegelijk bezig zijn. Die halen allebei last_update op, zien dat het nodig is, inserten dan allebei een record, en updaten de last_update. Resultaat is twee updates ipv eentje. Dit lijkt me een veel voorkomend probleem. Hoe los ik dat het beste op, op een zo snel mogelijke manier. Ik lock bijvoorbeeld liever niet ook alle updates van andere records globaal. Kan het in een enkele atomic query?