Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zablokować wybrany wiersz MySQL do czasu uruchomienia na nim UPDATE?

Umieść transakcję wokół dwóch zapytań i użyj FOR UPDATE opcja w SELECT zapytanie, aby zablokować sprawdzane wiersze. Każde inne połączenie, które spróbuje odczytać ten wiersz, zostanie zawieszone do czasu zatwierdzenia transakcji.

Upewnij się, że masz indeks kolumn, które testujesz w WHERE , więc nie będzie musiał skanować i blokować wszystkich sprawdzonych wierszy przed znalezieniem tego, który chcesz.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd w zapytaniu Symfony:oczekiwany literał, otrzymał „”

  2. Jak wybrać nazwę domeny z adresu e-mail

  3. PDO mysql:Jak sprawdzić, czy wstawienie się powiodło?

  4. GraphQL - zwraca typ wyliczony zależny od argumentu

  5. Najlepszy sposób na denormalizację danych w Django?