sql >> Database >  >> RDS >> Mysql

SELECTEER en vergrendel een rij en dan UPDATE

Wat je moet doen, is hier een soort vergrendeling toevoegen om race-omstandigheden zoals degene die je hebt gemaakt te voorkomen:

UPDATE persons SET processing=1 WHERE id=:id AND processing=0

Dat voorkomt dubbele vergrendeling.

Om dit nog meer te verbeteren, maakt u een slotkolom die u kunt gebruiken om te claimen:

UPDATE persons
  SET processing=:processing_uuid
  WHERE processing IS NULL
  LIMIT 1

Dit vereist een VARCHAR , geïndexeerde processing kolom gebruikt voor claimen die een standaardwaarde heeft van NULL . Als u een rij krijgt die in de resultaten wordt gewijzigd, heeft u een record geclaimd en kunt u ermee aan de slag door:

SELECT * FROM persons WHERE processing=:processing_uuid

Elke keer dat je probeert te claimen, genereer je een nieuwe claim-UUID-sleutel.



  1. Gegevens laden van een tekstbestand naar een tabel in oracle

  2. Update-query werkt niet met php

  3. IN-clausule met NULL of IS NULL

  4. Migraties uitvoeren met Rails in een Docker-container met meerdere containerinstanties