Her er 3 forskellige tilgange:
Atomic opdatering
update table set tries=tries+1 where condition=value;
og det vil blive gjort atomært.
Brug transaktioner
Hvis du først skal vælge værdien og opdatere den i din applikation, skal du sandsynligvis bruge transaktioner. Det betyder, at du bliver nødt til at bruge InnoDB, ikke MyISAM-tabeller. Din forespørgsel ville være noget i retning af:
BEGIN; //or any method in the API you use that starts a transaction
select tries from table where condition=value for update;
.. do application logic to add to `tries`
update table set tries=newvalue where condition=value;
END;
hvis transaktionen mislykkes, skal du muligvis manuelt prøve den igen.
Versionsskema
En almindelig tilgang er at introducere en versionskolonne i din tabel. Dine forespørgsler ville gøre noget som:
select tries,version from table where condition=value;
.. do application logic, and remember the old version value.
update table set tries=newvalue,version=version + 1 where condition=value and version=oldversion;
Hvis denne opdatering mislykkes/returnerer 0 berørte rækker, har en anden opdateret tabellen i mellemtiden. Du skal starte forfra - det vil sige, vælg de nye værdier, lav applikationslogikken og prøv opdateringen igen.