Tabelle umbenennen oder reorganisieren
Das Umbenennen einer Tabelle ist einfach:
ALTER TABLE old_table_name RENAME new_table_name;
Wann besteht überhaupt sinnvoll der Bedarf, in einer Datenbank-Anwendung eine Tabelle umzubenennen? Ich nutze das immer dann, wenn ich eine Tabelle, die über die Jahre gewachsen ist, reorganisieren will. Dabei soll sich dann vielleicht die Reihenfolge der Spalten ändern oder einzelne Spalten sollen andere Namen bekommen.
Reorganisieren einer Tabelle
Zu beachten ist, dass man ja in der ursprünglichen Tabelle bestehende Datensätze hat, die erhalten bleiben sollen.
Schritte:
- bestehende Tabelle umbenennen
- neue Tabelle unter dem ursprünglichen Namen anlegen (mit der neuen, überarbeiteten Tabellenstruktur)
- die Datensätze aus der alten (umbenannten) Tabelle in die neue Tabelle importieren
- die alte (umbenannte) Tabelle löschen
Zu Schritt 3:
Wenn wir davon ausgehen, dass neue Spalten hinzugekommen sind, kann es sein, dass man beim Transfer der Datensätze aus der alten in die neue Tabelle diese neuen Spalten just-in-time berechnen muss.
Ein komplettes Beispiel
Am Beispiel einer Kundentabelle mit folgender Struktur:
- ID – INTEGER DEFAULT AUTOINCREMENT
- KUNDENKLASSE – CHAR(1)
- KUNDENNAME – VARCHAR(30)
Wir wollen folgende Änderungen durchführen:
- das Feld
KUNDENNAME
soll inNAME
umbenannt werden - außerdem reicht uns der Platz für längere Kundennamen nicht – wir wollen das Feld auf 100 Zeichen verlängern
- wir wollen die Postleitzahl der Kunden speichern – brauchen dafür also eine neue Spalte
PLZ
mit 5 Zeichen Platz - zu guter Letzt soll das Feld
KUNDENKLASSE
hinter den Kundennamen rutschen, damit man beim bequemen Abfragen der Tabelle per SQL als erstes ID und Name der Datensätze sieht
Die bisherige Tabelle
kunden
wird umbenannt nachkunden_tmp
.-- Tabelle umbenennen ALTER TABLE kunden RENAME kunden_tmp;
Die neue Tabelle
kunden
wird mit der geforderten Tabellenstruktur angelegt.-- neue Tabelle anlegen CREATE TABLE kunden ( ID INTEGER DEFAULT AUTOINCREMENT, NAME VARCHAR(100), KUNDENKLASSE CHAR(1), PLZ CHAR(5), PRIMARY KEY ( ID ) );
Die Datensätze aus der alten Tabelle in die neue Tabelle übernehmen. Dabei wird hier im SELECT-Statement aus der alten Tabelle die Reihenfolge der ausgelesenen Spalten angepasst, damit sie zur Reihenfolge der Spalten in der neuen Tabelle passt. Das neue Feld
PLZ
bleibt leer und wird auch nicht angesprochen – wir haben dafür ja noch keine Daten.-- Datensätze aus der alten Tabelle übernehmen INSERT INTO kunden (id, name, kundenklasse) SELECT id, kundenname, kundenklasse FROM kunden_tmp;
Die ursprüngliche und jetzt umbenannte Kundentabelle
kunden_tmp
kann jetzt gelöscht werden.-- Tabelle löschen DROP TABLE kunden_tmp;