Zde jsou 3 různé přístupy:
Aktuální aktualizace
update table set tries=tries+1 where condition=value;
a bude to provedeno atomově.
Používejte transakce
Pokud potřebujete nejprve vybrat hodnotu a aktualizovat ji ve své aplikaci, pravděpodobně budete muset použít transakce. To znamená, že budete muset použít InnoDB, ne tabulky MyISAM. Váš dotaz by byl něco jako:
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;
pokud se transakce nezdaří, možná ji budete muset zkusit znovu ručně.
Schéma verze
Běžným přístupem je zavedení sloupce verze do tabulky. Vaše dotazy budou vypadat takto:
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;
Pokud se aktualizace nezdaří/vrátí 0 dotčených řádků, mezitím tabulku aktualizoval někdo jiný. Musíte začít znovu – to znamená vybrat nové hodnoty, provést aplikační logiku a zkusit aktualizaci znovu.