Die SQL ALTER TABLE Anweisung erstellt, löscht oder verändert Spalten in einer bestehenden Tabelle
ALTER TABLE Tabellenname
...;
Mit SQL ALTER TABLE haben wir folgende Möglichkeiten:
- Spalten hinzufügen
- Spalten löschen
- Spalten umbenennen
- Datentypen verändern
- Index erstellen
- Index löschen
- Constraint hinzufügen
- Constraint löschen
Spalten hinzufügen
Um in SQL nachträglich eine Spalte hinzuzufügen, fügen wir an die ALTER TABLE-Anweisung den Befehl ADD an, um dem System mitzuteilen, dass wir eine neue Spalte hinzufügen möchten.
ALTER TABLE Tabellenname
ADD Spaltenname Datentyp;
Beispiel: In der bestehenden Bestellungen-Tabelle in unserem Unternehmen fiel uns auf, dass eine Spalte für die Bestellmengen fehlt. Daher möchten wir sie nachträglich hinzufügen:
ALTER TABLE Bestellungen
ADD Bestellmenge INT;
Die bestehende Tabelle „Bestellungen“ wird verändert. Die Spalte „Bestellmengen“ wird hinzugefügt (ADD) und als Datentyp Integer (ganze Zahl) gespeichert.
Spalten löschen
Der DROP COLUMN Befehl löscht Spalten aus einer Tabelle. Im Anschluss auf diesen Befehl folgt die Spalte, die entfernt werden soll.
ALTER TABLE Tabellenname
DROP COLUMN Spaltenname;
Beispiel: In der Bestellungen-Tabelle unseres Unternehmens wurde bisher immer der Kontinent mit aufgelistet, in welchem die Bestellung stattfand. Da wir die Länder unserer Kunden gegeben haben, ist diese Spalte nicht notwendig. Wir löschen die Spalte Kontinent über:
ALTER TABLE Bestellungen
DROP COLUMN Kontinent;
Die bestehende Tabelle „Bestellungen“ wird verändert. Die Spalte „Kontinent“ wird entfernt (DROP COLUMN).
Spalten umbenennen
Spalten lassen sich mit dem Befehl CHANGE COLUMN in MySQL bzw. RENAME COLUMN in Oracle und PostgreSQL umbenennen.
--MySQL
ALTER TABLE Tabellenname
CHANGE AlterName NeuerName;
--Oracle, PostgreSQL
ALTER TABLE Tabellenname
RENAME COLUMN AlterName TO NeuerName;
Beispiel: Nach der Erstellung der Kunden-Tabelle unseres Unternehmens fällt uns auf, dass die Spalte „Geburtsdautm“ einen Tippfehler enthält. Zum Korrigieren des Fehlers nutzen wir folgenden Befehl:
--MySQL
ALTER TABLE Kunden
CHANGE Geburtsdautm Geburtsdatum;
--Oracle, PostgreSQL
ALTER TABLE Kunden
RENAME COLUMN Geburtsdautm TO Geburtsdatum;
Die bestehende Tabelle „Kunden“ wird verändert. Die Spalte „Geburtsdautm“ wird zu „Geburtsdatum“ umgeändert (RENAME COLUMN … TO …/ CHANGE).
Datentypen verändern
Der Datentyp in einer Spalte lässt sich mittels MODIFY in MySQL und Oracle oder ALTER COLUMN in SQL Server verändern.
--MySQL, Oracle
ALTER TABLE Tabellenname
MODIFY Spaltenname NeuerDatentyp;
--SQL Server
ALTER TABLE Tabellenname
ALTER COLUMN Spaltenname NeuerDatentyp;
Beispiel: In der Kunden-Tabelle unseres Unternehmens ist die maximale Länge der Straße auf 20 Zeichen begrenzt. Beim Hinzufügen der Außerordentlichlangenstraße 42 überschreiten wir diese Länge. Daher möchten wir die maximale Länge auf 50 Zeichen anpassen.
--MySQL, Oracle
ALTER TABLE Kunden
MODIFY Straße VARCHAR(50);
--SQL Server
ALTER TABLE Kunden
ALTER COLUMN Straße VARCHAR(50);
Die bestehende Tabelle „Kunden“ wird verändert. Der Datentyp der Spalte „Straße“ wird aktualisiert als Text mit bis zu 50 Zeichen (VARCHAR).
Index erstellen
Ein Index beschleunigt Abfragen innerhalb einer Tabelle. Der Befehl ADD INDEX fügt einen Index in einer bestehenden Tabelle hinzu.
ALTER TABLE Tabellenname
ADD INDEX Indexname(Spaltenname);
Beispiel: In den nächsten Wochen analysieren wir in unserem Unternehmen, inwieweit unser Unternehmen im Weltmarkt aufgestellt ist. Dazu werden wir sehr häufig die Spalte Land für Suchabfragen nutzen. Um die Abfragen zu beschleunigen, entscheiden wir uns einen Index für diese Spalte zu erstellen:
ALTER TABLE Bestellungen
ADD INDEX Laenderanalyse(Land);
Die bestehende Tabelle Bestellungen wird verändert (ALTER TABLE). Der Index namens Laenderanalyse wird erstellt (ADD INDEX) und der Spalte Land zugeordnet.
Index löschen
Ein erstellter Index kann Anpassungen z.B. via UPDATE-Anweisungen deutlich verlangsamen. Daher ist es sinnvoll einen Index zu löschen, wenn er nicht mehr benötigt wird.
ALTER TABLE Tabellenname
DROP INDEX Indexname;
Beispiel: Nachdem die Datenanalyse beendet ist, benötigen wir den Index Laenderanalyse nicht mehr. Wir löschen diesen also via:
ALTER TABLE Bestellungen
DROP INDEX Laenderanalyse;
Die bestehende Tabelle Bestellungen wird verändert (ALTER TABLE). Der Index namens Laenderanalyse wird entfernt (DROP INDEX).
Constraint hinzufügen
Constraints schränken ein, welche Daten in Spalten eingegeben werden können. Mit dem Befehl ADD CONSTRAINT lassen sich solche Regeln nachträglich erstellen.
ALTER TABLE Tabellenname
ADD CONSTRAINT ConstraintName ConstraintTyp (Spaltennamen);
Beispiel: Unser Unternehmen hat einen Online Zombie-Shooter als Testversion veröffentlicht. Die Spieler haben einige Fehler gefunden. Einer davon ist, dass man bei der Account-Erstellung keinen Benutzernamen erstellen muss. Lässt man das Feld leer, erscheint keine Fehlermeldung. Das muss geändert werden.
ALTER TABLE Accounts
ADD CONSTRAINT NOT NULL (Benutzername);
Die bestehende Tabelle Accounts wird verändert (ALTER TABLE). Der Constraint NOT NULL wird hinzugefügt, welcher keine leeren Felder erlaubt. Die Spalte auf die sich der Constraint bezieht ist Benutzername.
Constraint löschen
Der Befehl DROP CONSTRAINT löscht fehlerhaft angelegte Constraints. In MySQL hingegen muss DROP INDEX genutzt werden.
ALTER TABLE Tabellenname DROP CONSTRAINT ConstraintName;
ALTER TABLE Tabellenname DROP INDEX ConstraintName; --MySQL
Beispiel: In unserem Online Zombie-Shooter wurde zur Spalte Ingame_Geld versehentlich der Constraint UNIQUE zugewiesen unter dem Namen UniqueGeld. Selbstverständlich kann es vorkommen, dass verschiedene Spieler dieselbe Menge an Geld besitzen. Daher muss das entfernt werden:
ALTER TABLE Accounts
DROP CONSTRAINT UniqueGeld;
Die bestehende Tabelle Accounts wird verändert (ALTER TABLE). Der bestehende Constraint UniqueGeld wird gelöscht (DROP CONSTRAINT).