sql >> Databasteknik >  >> RDS >> Mysql

VÄLJ och lås en rad och sedan UPPDATERA

Vad du behöver göra är att lägga till något slags lås här för att förhindra tävlingsförhållanden som det du har skapat:

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

Då slipper du dubbellåsa den.

För att förbättra detta ännu mer, skapa en låskolumn som du kan använda för att göra anspråk på:

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

Detta kräver en VARCHAR , indexerad processing kolumn som används för anspråk som har en standard på NULL . Om du får en rad ändrad i resultaten har du gjort anspråk på en post och kan gå och arbeta med den genom att använda:

SELECT * FROM persons WHERE processing=:processing_uuid

Varje gång du försöker göra anspråk, generera en ny UUID-nyckel för anspråk.



  1. SQL Server Performance TOP CPU Query -1

  2. Extrahera MySQL-fält av rad till PHP-variabler och array

  3. Ändra MYSQL-datumformat

  4. MySQL:#126 - Felaktig nyckelfil för tabell