sql >> Base de Datos >  >> RDS >> Mysql

¿Está incrementando un campo en MySQL atómico?

La escritura es atómica, pero un incremento también requiere una lectura. Entonces, la pregunta es:¿está seguro de que la lectura es segura, en otras palabras, está seguro de que otro subproceso que realiza el incremento no terminará con el mismo valor que se incrementará? Tengo dudas. La forma 100% correcta de hacer esto sería.

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