Die SQL ALTER TABLE Anweisung erstellt, löscht oder verändert Spalten in einer bestehenden Tabelle

ALTER TABLE Tabellenname 
...; 
SQL ALTER TABLE

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).

ARTIKEL TEILEN

Hast du Fragen? Hinterlasse einen Kommentar!