Co musíte udělat, je přidat nějaký druh zámku, abyste zabránili podmínkám závodu, jako je ten, který jste vytvořili:
UPDATE persons SET processing=1 WHERE id=:id AND processing=0
Vyhnete se tak dvojitému uzamčení.
Chcete-li to ještě zlepšit, vytvořte sloupec zámku, který můžete použít pro nárokování:
UPDATE persons
SET processing=:processing_uuid
WHERE processing IS NULL
LIMIT 1
To vyžaduje VARCHAR
, indexované processing
sloupec používaný pro nárokování, který má výchozí hodnotu NULL
. Pokud ve výsledcích získáte upravený řádek, nárokovali jste záznam a můžete s ním pracovat pomocí:
SELECT * FROM persons WHERE processing=:processing_uuid
Pokaždé, když se pokusíte uplatnit nárok, vygenerujte nový klíč UUID nároku.