sql >> Database >  >> RDS >> Mysql

MySQL select rij vergrendelen totdat UPDATE erop is uitgevoerd?

Zet een transactie rond de twee zoekopdrachten en gebruik de FOR UPDATE optie in de SELECT query om de rijen te vergrendelen die het heeft onderzocht. Elke andere verbinding die die rij probeert te lezen, wordt opgeschort totdat de transactie is doorgevoerd.

Zorg ervoor dat je een index hebt op de kolommen die je test in de WHERE clausule, dus het hoeft geen scan uit te voeren en alle rijen te vergrendelen die het heeft gecontroleerd voordat het de gewenste vindt.

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. Hoe selecteer ik voorwaardelijk een veld uit een van de twee tabellen?

  2. Gegevenswijzigingen onder Read Committed Snapshot Isolation

  3. Hoe maak je de primaire sleutel serieel?

  4. Hoe RADIANS() werkt in MariaDB