Ответ 1
Здесь три разных подхода:
Атомное обновление
update table set tries=tries+1 where condition=value;
и это будет сделано атомарно.
Использовать транзакции
Если вам нужно сначала выбрать значение и обновить его в своем приложении, вам, вероятно, потребуется использовать транзакции. Это означает, что вам придется использовать InnoDB, а не таблицы MyISAM. Ваш запрос будет выглядеть примерно так:
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;
если транзакция завершится с ошибкой, вам может потребоваться повторить ее вручную.
Схема версии
Общим подходом является введение столбца версии в вашу таблицу. Ваши запросы будут делать что-то вроде:
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;
Если это обновление выходит из строя/возвращает 0 строк, кто-то еще обновил таблицу в среднем времени. Вы должны начать все сначала, то есть выбрать новые значения, выполнить логику приложения и снова попробовать обновление.