Mysql
 sql >> Datenbank >  >> RDS >> Mysql

ALTER TABLE ohne die Tabelle zu sperren?

Die einzige andere Möglichkeit ist, manuell zu tun, was viele RDBMS-Systeme ohnehin tun ...
- Eine neue Tabelle erstellen

Sie können dann den Inhalt der alten Tabelle Stück für Stück kopieren. Achten Sie dabei immer auf INSERT/UPDATE/DELETE in der Quelltabelle. (Könnte durch einen Auslöser verwaltet werden. Obwohl dies zu einer Verlangsamung führen würde, ist es keine Sperre ...)

Wenn Sie fertig sind, ändern Sie den Namen der Quelltabelle und dann den Namen der neuen Tabelle. Vorzugsweise in einer Transaktion.

Wenn Sie fertig sind, kompilieren Sie alle gespeicherten Prozeduren usw. neu, die diese Tabelle verwenden. Die Ausführungspläne werden wahrscheinlich nicht mehr gültig sein.

BEARBEITEN:

Es wurden einige Kommentare darüber abgegeben, dass diese Einschränkung etwas schlecht ist. Also dachte ich, ich würde es aus einer neuen Perspektive betrachten, um zu zeigen, warum es so ist...

  • Das Hinzufügen eines neuen Feldes ist wie das Ändern eines Feldes in jeder Zeile.
  • Feldsperren wären viel schwieriger als Zeilensperren, ganz zu schweigen von Tabellensperren.

  • Du änderst tatsächlich die physische Struktur auf der Platte, jeder Datensatz bewegt sich.
  • Das ist wirklich wie ein UPDATE für den gesamten Tisch, aber mit mehr Wirkung...