@damso
RDBMS radi deo posla, deo posla moras da odradis ti.
prosto
SELECT x FROM t
UPDATE t SET x= 'y'
moze dovesti do problema. Vecina RDBMS-ova ima posebu sintaksu koja ti omogucava da zakljucas zapis da niko ne moze da ga promeni pre commit-a tvoje transakcije. Sintaksa je obicno
SELECT x FROM t FOR UPDATE
Ono o cemu jos treba voditi racuna je da ponekad i pored iste sintakse razliciti RDBMS-ovi ne ponasaju se svi na isti nacin.
Ako ne postoji ovakva sintaksa u samom RDBMS-u ili je ponasanje RDBMS-a na ovakvoj sintaksi ne odgovarajuce, moguce je i eksplicitno sam zakljucati polje pre select-a.
UPDATE t SET x=x
SELECT x FROM T
UPDATE t SET x= 'y'
Pored ovog pristupa sa zakljucavanjem (tzv pesimistic locking), moguc je tzv. optimistic locking, gde nista unapred ne zakljucavamo vec prilikom update-a radimo proveru da ne gazimo tudje izmene
UPDATE t SET x='y' WHERE x='z' AND id=... (gde smo 'z' procitali sa select-om)
a onda proveravamo da li smo azurirali ocekivani broj zapisa i ako nismo rollbackujemo transakciju. Medjutim u takvom pristupu moramo imati i neki nacin da identifikujemo zapise jednoznacno (zato stoji ono AND id=...) da ne bi azurirali tacan broj zapisa ali pogresnih.