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

ALTER TABLE bez blokowania stołu?

Jedyną inną opcją jest ręczne wykonanie tego, co i tak robi wiele systemów RDBMS...
- Utwórz nową tabelę

Następnie możesz skopiować zawartość starej tabeli na porcję na raz. Zawsze zachowując ostrożność przy INSERT/UPDATE/DELETE w tabeli źródłowej. (Może być zarządzany przez wyzwalacz. Chociaż spowodowałoby to spowolnienie, nie jest to blokada...)

Po zakończeniu zmień nazwę tabeli źródłowej, a następnie zmień nazwę nowej tabeli. Najlepiej w transakcji.

Po zakończeniu ponownie skompiluj wszystkie procedury składowane itp., które używają tej tabeli. Plany wykonania prawdopodobnie przestaną obowiązywać.

EDYTUJ:

Niektóre komentarze zostały zgłoszone, że to ograniczenie jest nieco słabe. Pomyślałem więc, że przedstawię to z nowej perspektywy, aby pokazać, dlaczego tak jest...

  • Dodanie nowego pola jest jak zmiana jednego pola w każdym wierszu.
  • Blokady pola byłyby znacznie trudniejsze niż blokady rzędów, nie mówiąc już o blokowaniu tabel.

  • Właściwie zmieniasz fizyczną strukturę dysku, każdy zapis się porusza.
  • To naprawdę jest jak AKTUALIZACJA całego stołu, ale ma większy wpływ...


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. AbstractMethodError w zestawie wyników.getObject

  2. Wstawianie MySQL do wielu tabel (relacyjne)

  3. Hosting MySQL na platformie Azure, w pełni zarządzana usługa bazy danych w chmurze wprowadzana na ScaleGrid

  4. Proste podzapytanie z OuterRef

  5. Przekroczenie limitu czasu skryptu podczas importu bazy danych