Mysql
 sql >> Base de données >  >> RDS >> Mysql

L'incrémentation d'un champ dans MySQL est-elle atomique ?

L'écriture est atomique mais un incrément nécessite également une lecture. La question est donc la suivante :êtes-vous sûr que la lecture est sûre, en d'autres termes, êtes-vous sûr qu'un autre thread effectuant l'incrémentation ne se retrouvera pas avec la même valeur à incrémenter ? J'ai des doutes. La façon 100 % correcte de procéder serait.

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