Oto 3 różne podejścia:
Aktualizacja atomowa
update table set tries=tries+1 where condition=value;
i zostanie to zrobione atomowo.
Użyj transakcji
Jeśli musisz najpierw wybrać wartość i zaktualizować ją w swojej aplikacji, prawdopodobnie będziesz musiał użyć transakcji. Oznacza to, że będziesz musiał użyć InnoDB, a nie tabel MyISAM. Twoje zapytanie będzie wyglądało następująco:
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;
jeśli transakcja się nie powiedzie, może być konieczne ręczne ponowienie próby.
Schemat wersji
Typowym podejściem jest wprowadzenie do tabeli kolumny wersji. Twoje zapytania zrobiłyby coś takiego:
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;
Jeśli ta aktualizacja nie powiedzie się/zwróci 0 wierszy, których dotyczy problem, ktoś inny zaktualizował tabelę w międzyczasie. Musisz zacząć od początku - to znaczy wybrać nowe wartości, wykonać logikę aplikacji i ponownie spróbować aktualizacji.