Mysql
 sql >> Database >  >> RDS >> Mysql

SELEZIONA e blocca una riga e poi AGGIORNA

Quello che devi fare è aggiungere una sorta di blocco qui per prevenire condizioni di gara come quella che hai creato:

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

Ciò eviterà il doppio blocco.

Per migliorare ulteriormente questo aspetto, crea una colonna di blocco che puoi utilizzare per rivendicare:

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

Ciò richiede un VARCHAR , processing indicizzata colonna utilizzata per rivendicare che ha un valore predefinito di NULL . Se ricevi una riga modificata nei risultati, hai rivendicato un record e puoi lavorare con esso utilizzando:

SELECT * FROM persons WHERE processing=:processing_uuid

Ogni volta che provi a rivendicare, genera una nuova chiave UUID di rivendicazione.