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

WYBIERZ i zablokuj wiersz, a następnie AKTUALIZUJ

To, co musisz zrobić, to dodać tutaj jakiś rodzaj blokady, aby zapobiec warunkom wyścigu, takim jak ten, który stworzyłeś:

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

Pozwoli to uniknąć podwójnego zablokowania.

Aby jeszcze bardziej to poprawić, utwórz kolumnę blokady, której możesz użyć do zgłaszania roszczeń:

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

Wymaga to VARCHAR , zindeksowane processing kolumna używana do zgłaszania roszczeń, która ma wartość domyślną NULL . Jeśli zmodyfikujesz wiersz w wynikach, zarejestrowałeś rekord i możesz z nim pracować, używając:

SELECT * FROM persons WHERE processing=:processing_uuid

Za każdym razem, gdy próbujesz zgłosić roszczenie, wygeneruj nowy klucz UUID roszczenia.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Co to znaczy, gdy mówię, że instrukcja „Przygotowana” jest wstępnie skompilowana?

  2. Jak sprawić, by python_select działał dla polecenia „$> python”?

  3. Wywołanie REST API z wyzwalacza lub procedury składowanej w mysql?

  4. Jak przekonwertować datetime na UTC w MySQL

  5. Używanie poprawnego lub preferowanego, nierównego operatora w MySQL