Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Ist das Erhöhen eines Felds in MySQL atomar?

Das Schreiben ist atomar, aber ein Inkrement erfordert auch ein Lesen. Die Frage ist also:Sind Sie sicher, dass der Lesevorgang sicher ist, mit anderen Worten, sind Sie sicher, dass ein anderer Thread, der die Inkrementierung durchführt, am Ende nicht denselben zu inkrementierenden Wert erhält? Ich habe Zweifel. Der 100 % richtige Weg, dies zu tun, wäre.

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