Was Sie tun müssen, ist, hier eine Art Sperre hinzuzufügen, um Rennbedingungen wie die von Ihnen erstellte zu verhindern:
UPDATE persons SET processing=1 WHERE id=:id AND processing=0
Dadurch wird eine doppelte Sperrung vermieden.
Um dies noch weiter zu verbessern, erstellen Sie eine Sperrspalte, die Sie zum Beanspruchen verwenden können:
UPDATE persons
SET processing=:processing_uuid
WHERE processing IS NULL
LIMIT 1
Dies erfordert einen VARCHAR
, indizierte processing
Spalte, die zum Beanspruchen verwendet wird und den Standardwert NULL
hat . Wenn Sie eine geänderte Zeile in den Ergebnissen erhalten, haben Sie einen Datensatz beansprucht und können mit ihm arbeiten, indem Sie Folgendes verwenden:
SELECT * FROM persons WHERE processing=:processing_uuid
Generieren Sie bei jedem Versuch und Anspruch einen neuen Anspruchs-UUID-Schlüssel.