Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

O incremento de um campo no MySQL é atômico?


A gravação é atômica, mas um incremento também requer uma leitura. Então a pergunta é:você tem certeza de que a leitura é segura, ou seja, você tem certeza de que outra thread fazendo o incremento não terminará com o mesmo valor a ser incrementado? Tenho dúvidas. A maneira 100% correta de fazer isso seria.
-- 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...