sql >> Databáze >  >> RDS >> Mysql

Zamknout vybraný řádek MySQL, dokud na něm nebude spuštěna aktualizace?

Umístěte transakci kolem dvou dotazů a použijte FOR UPDATE možnost v SELECT dotaz k uzamčení řádků, které zkoumal. Jakékoli další připojení, které se pokusí přečíst tento řádek, bude pozastaveno, dokud nebude transakce potvrzena.

Ujistěte se, že máte index u testovaných sloupců v WHERE klauzule, takže nebude muset skenovat a zamykat všechny řádky, které zkontroloval, než najde ten, který chcete.

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. Chyba připojení JDBC:nerozpoznané časové pásmo

  2. Nejlepší způsob, jak ukládat a načítat synonyma v databázi mysql

  3. Google Dataflow (Apache beam) hromadné vložení JdbcIO do mysql databáze

  4. Optimalizace MySQL na spojovacích tabulkách s kritérii rozsahu