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

UPDATE with SELECT, czy zablokuje każdy wiersz lub wszystkie WYBRANE rekordy?

UPDATE działa w transakcji - jest to atomic operacja, co oznacza, że ​​jeśli jeden z wierszy ulegnie awarii (na przykład z powodu ograniczenia unikatowego), nie zaktualizuje żadnego z 5000 wierszy. Jest to jedna z właściwości ACID transakcyjnej bazy danych.

Z tego powodu UPDATE przytrzymaj blokadę na wszystkich wierszach przez całą transakcję. W przeciwnym razie inna transakcja może dalej aktualizować wartość wiersza, na podstawie jego bieżącej wartości (powiedzmy, że aktualizacja rekordów ustawiona wartość =wartość * '2'). Ta instrukcja powinna dać inny wynik w zależności od tego, czy pierwsza transakcja zostanie zatwierdzona, czy wycofana. Z tego powodu powinien poczekać, aż pierwsza transakcja zakończy wszystkie 5000 aktualizacji.

Jeśli chcesz zwolnić blokady, po prostu przeprowadź aktualizację w (mniejszych) partiach.

PS autocommit kontroluje, czy każde oświadczenie jest wydawane we własnej transakcji, ale nie wpływa na wykonanie pojedynczego zapytania




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dostęp do danych wyjściowych procedury składowanej MySQL w Zend Framework 2

  2. Nieznane kodowanie podczas używania df.to_sql() do pisania do MySQL przy użyciu pyodbc

  3. Problemy z Railsem 3 MySQL

  4. mySQL wybierz W zakresie

  5. OpenCart:Jak dokładnie wypełnić oc_category_path