Mysql
 sql >> Database >  >> RDS >> Mysql

L'incremento di un campo in MySQL è atomico?

La scrittura è atomica ma un incremento richiede anche una lettura. Quindi la domanda è:sei sicuro che la lettura sia sicura, in altre parole, sei sicuro che un altro thread che esegue l'incremento non finirà con lo stesso valore da incrementare? Ho dei dubbi. Il modo corretto al 100% per farlo sarebbe.

-- 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...