2009-05-20 2 views
3

MySQL hat eine RENAME TABLE-Anweisung, mit der Sie den Namen einer Tabelle ändern können.Wie funktioniert die RENAME TABLE-Anweisung von MySQL?

Das Handbuch erwähnt

Der Umbenennungsvorgang atomar erfolgt, was bedeutet, dass keine andere Sitzung kann Zugriff auf eine der Tabellen während der Umbenennungs

Das Handbuch läuft nicht (zu mein Wissen), wie diese Umbenennung durchgeführt wird. Wird eine vollständige Kopie der Tabelle erstellt, ein neuer Name vergeben und die alte Tabelle gelöscht? Oder macht MySQL hinter den Kulissen etwas Zauberei, um den Tisch schnell umzubenennen?

Mit anderen Worten, wirkt sich die Größe der Tabelle darauf aus, wie lange die RENAME-Tabellenanweisung zum Ausführen benötigt. Gibt es andere Dinge, die dazu führen könnten, dass die Umbenennung eines Blocks erheblich blockiert wird?

Antwort

5

Ich glaube, dass MySQL nur Metadaten und Verweise auf den alten Namen der Tabelle in gespeicherten Prozeduren ändern muss - die Anzahl der Datensätze in der Tabelle sollte irrelevant sein.

+0

+1: Metadata Änderungen leicht gemacht atomar. –

1

Zusätzlich zur Änderung der Metadaten wird auch die zugehörige FRM-Datei umbenannt. Während sie behaupten, kann es zu einem „atomaren“ Betrieb zu sein, dann ist dies ein tatsächlicher Kommentar im Code für die mysql_rename_tables Funktion ...

/* Lets hope this doesn't fail as the result will be messy */ 

=)

+2

mysql 5.0.45, sql_rename.cpp, Zeile 81. –

+0

Fehler und Atomarität sind verschiedene Dinge. Die Tatsache, dass ein Fehler zu einer komplexen Bereinigung führt - während er ein Schloss hält - kann immer noch atomar sein. Atom kann auch langsam bedeuten. –

+0

"Atomarität bezieht sich auf die Fähigkeit des DBMS zu garantieren, dass entweder alle Aufgaben einer Transaktion ausgeführt werden oder keiner von ihnen ist." Sie kümmerten sich um "Versagen", indem sie versuchten, die Änderungen rückgängig zu machen. Aus ihrem Code-Kommentar sieht es so aus, als würden sie nur auf Atomizität hoffen. –