Zapis jest niepodzielny, ale przyrost wymaga również odczytu. Pytanie brzmi:Czy jesteś pewien, że odczyt jest bezpieczny, innymi słowy, czy na pewno inny wątek wykonujący inkrementację nie zakończy się z tą samą wartością do zwiększenia? Mam wątpliwości. W 100% prawidłowym sposobem na zrobienie tego byłoby.
-- begin transaction here
select counter from myCounters where counter_id = 1 FOR UPDATE;
-- now the row is locked and nobody can read or modify its values
update myCounters set counter = ? where id = 1;
-- set ? to counter + 1 programmatically
commit; -- and unlock...