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

Wie man Mysql Race Conditions richtig vermeidet

Um dies zu erreichen, müssen Sie den Datensatz irgendwie sperren. Fügen Sie eine LockedBy-Spalte hinzu, die standardmäßig 0 ist.

Wenn jemand auf die Schaltfläche drückt, führen Sie eine Abfrage ähnlich der folgenden aus:

UPDATE table SET LockedBy=WHERE LockedBy=0 und id=;

Überprüfen Sie nach dem Update die betroffenen Zeilen (in php mysql_affected_rows). Wenn der Wert 0 ist, bedeutet dies, dass die Abfrage nichts aktualisiert hat, da die LockedBy-Spalte nicht 0 ist und daher von jemand anderem gesperrt wurde.

Hoffe das hilft