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

Ändern Sie die Tabelle, ohne die gesamte Tabelle zu sperren

Kurze Antwort:Für MySQL <5.6 sind Sperren erforderlich. Ab 5.6 und bei Verwendung von InnoDB werden gesperrt werden für viele ALTER TABLE nicht benötigt Operationen einschließlich Hinzufügen einer Spalte .

Wenn Sie MySQL 5.5 oder älter verwenden, erhält es für den gesamten Vorgang eine Lesesperre und am Ende eine kurze Schreibsperre.

Aus der MySQL-Dokumentation für ALTER TABLE ...

Das heißt, wenn eine gelesene Spalte hinzugefügt wird, wird die Tabelle für den größten Teil der Operation gesperrt und am Ende eine Schreibsperre erhalten.

MySQL 5.6 hat die Online-DDL hinzugefügt zu InnoDB, das viele Dinge beschleunigt und verbessert, wie z. B. das Ändern von Tabellen und Indizes. Das Hinzufügen einer Spalte zu einer Tabelle erfordert keine Tabellensperren mehr außer eventuell kurzen exklusiven Sperren zu Beginn und am Ende der Operation .

Es sollte automatisch passieren, aber um sicherzugehen, setzen Sie ALGORITHM=inplace und LOCK=none zu Ihrer ALTER TABLE Aussage.

Es gibt eine Ausnahme...