sql >> Databasteknik >  >> RDS >> Mysql

Låsa MySQL-valraden tills UPPDATERING har körts på den?

Lägg en transaktion runt de två frågorna och använd FÖR UPPDATERING alternativet i SELECT fråga för att låsa raderna som den undersökte. Alla andra anslutningar som försöker läsa den raden kommer att stängas av tills transaktionen har genomförts.

Se till att du har ett index på kolumnerna du testar i WHERE klausul, så den behöver inte göra en skanning och låsa alla rader den kontrollerade innan den hittade den du vill ha.

START TRANSACTION;

SELECT @id := `id`,`item` 
FROM `queue_items` 
WHERE `processed_at` IS NULL AND `completed_at` IS NULL 
ORDER BY `id` ASC 
LIMIT 1
FOR UPDATE;

UPDATE `queue_items` SET `processed_at` = @processedAt WHERE `id` = @id

COMMIT;


  1. Hur man lägger till ett villkorligt unikt index på PostgreSQL

  2. SQL Server SELECT i befintlig tabell

  3. Hamming avstånd på binära strängar i SQL

  4. fel, sträng eller binär data skulle trunkeras när man försöker infoga