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

VYBERTE a uzamkněte řádek a poté UPDATE

Co musíte udělat, je přidat nějaký druh zámku, abyste zabránili podmínkám závodu, jako je ten, který jste vytvořili:

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

Vyhnete se tak dvojitému uzamčení.

Chcete-li to ještě zlepšit, vytvořte sloupec zámku, který můžete použít pro nárokování:

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

To vyžaduje VARCHAR , indexované processing sloupec používaný pro nárokování, který má výchozí hodnotu NULL . Pokud ve výsledcích získáte upravený řádek, nárokovali jste záznam a můžete s ním pracovat pomocí:

SELECT * FROM persons WHERE processing=:processing_uuid

Pokaždé, když se pokusíte uplatnit nárok, vygenerujte nový klíč UUID nároku.



  1. MySQL výpočet kumulativního součtu s podmínkou reset

  2. jak použít FORMÁT DATA v mém dotazu?

  3. Mysql se nespustí po upgradu Mac OS X Yosemite (Mac OS 10.10)

  4. Jak získat plovoucí výsledek dělením dvou celočíselných hodnot pomocí T-SQL?