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

UPDATE pomocí SELECT uzamkne každý řádek nebo všechny VYBRANÉ záznamy

UPDATE běží v transakci – je to atomic operace, což znamená, že pokud jeden z řádků selže (například kvůli jedinečnému omezení), neaktualizuje žádný z 5000 řádků. Toto je jedna z vlastností ACID transakční databáze.

Z tohoto důvodu UPDATE podržte zámek na všech řádcích pro celou transakci. Jinak může další transakce dále aktualizovat hodnotu řádku na základě jeho aktuální hodnoty (řekněme aktualizace záznamů nastavená hodnota =hodnota * '2'). Tento příkaz by měl přinést různé výsledky v závislosti na tom, zda se první transakce potvrdí nebo vrátí zpět. Z tohoto důvodu by měl počkat na první transakci, než dokončí všech 5000 aktualizací.

Pokud chcete uvolnit zámky, proveďte aktualizaci v (menších) dávkách.

P.S. autocommit kontroluje, zda je každý příkaz vydán ve vlastní transakci, ale neovlivňuje provedení jednoho dotazu




  1. Řešení chyb Oracle

  2. MySQL:Použijte hodnotu CASE/ELSE jako parametr spojení

  3. Jak odstranit duplikáty v tabulce MySQL

  4. Zobrazení data z databáze PHP