SQL – Tabellenstruktur ändern

1. Was bedeutet Tabellenstruktur ändern?

Mit SQL können nicht nur Daten gespeichert und abgefragt werden. Auch die Struktur bestehender Tabellen kann verändert werden.

Dazu gehören das Hinzufügen, Ändern, Umbenennen und Entfernen von Spalten sowie das Löschen ganzer Tabellen.

Diese Befehle gehören überwiegend zur Data Definition Language (DDL).

Unsere Beispieltabelle: kunden

CREATE TABLE kunden (
    kunden_id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    stadt VARCHAR(100),
    alter INT
);

Beispieldaten

kunden_id name stadt alter
1 Anna Müller Berlin 28
2 Max Schmidt Leipzig 35
3 Lisa Weber Dresden 24

2. ALTER TABLE – Tabelle verändern

Mit ALTER TABLE kann die Struktur einer bereits vorhandenen Tabelle verändert werden.

Grundsyntax

ALTER TABLE tabellenname
aenderung;

ALTER TABLE wird beispielsweise verwendet, um neue Spalten hinzuzufügen, Datentypen zu ändern oder Spalten zu entfernen.


3. ADD COLUMN – Neue Spalte hinzufügen

Mit ADD COLUMN wird eine neue Spalte zu einer vorhandenen Tabelle hinzugefügt.

SQL-Code

ALTER TABLE kunden
ADD COLUMN email VARCHAR(150);

Ergebnis: Neue Tabellenstruktur

Spalte Datentyp
kunden_idINT
nameVARCHAR(100)
stadtVARCHAR(100)
alterINT
emailVARCHAR(150)

Die Spalte email wird am Ende der Tabelle hinzugefügt. Vorhandene Datensätze bleiben erhalten. Die neue Spalte enthält zunächst NULL, sofern kein anderer Standardwert festgelegt wurde.


4. ADD COLUMN mit FIRST

Mit FIRST kann eine neue Spalte an die erste Position der Tabelle gesetzt werden.

SQL-Code

ALTER TABLE kunden
ADD COLUMN anrede VARCHAR(20) FIRST;

Neue Spaltenreihenfolge

Position Spalte
1anrede
2kunden_id
3name
4stadt
5alter
6email

5. ADD COLUMN mit AFTER

Mit AFTER wird eine neue Spalte direkt hinter einer bestimmten vorhandenen Spalte eingefügt.

SQL-Code

ALTER TABLE kunden
ADD COLUMN telefon VARCHAR(30) AFTER name;

Die Spalte telefon wird direkt hinter der Spalte name eingefügt.

Merken: FIRST fügt eine Spalte am Anfang ein. AFTER fügt sie hinter einer bestimmten Spalte ein. Diese Syntax wird von MySQL unterstützt.

6. Mehrere Spalten hinzufügen

Mehrere Spalten können in einer ALTER TABLE-Anweisung hinzugefügt werden.

SQL-Code

ALTER TABLE kunden
ADD COLUMN geburtsdatum DATE,
ADD COLUMN aktiv BOOLEAN DEFAULT TRUE;

Die Tabelle erhält die Spalten geburtsdatum und aktiv.

Für aktiv wird der Standardwert TRUE festgelegt, wenn kein anderer Wert angegeben wird.


7. MODIFY COLUMN – Datentyp ändern

Mit MODIFY COLUMN können Eigenschaften einer vorhandenen Spalte geändert werden, beispielsweise der Datentyp oder die maximale Zeichenlänge.

SQL-Code

ALTER TABLE kunden
MODIFY COLUMN name VARCHAR(200) NOT NULL;

Die Spalte name kann jetzt bis zu 200 Zeichen speichern.

Achtung: Beim Ändern eines Datentyps müssen die vorhandenen Daten zum neuen Typ passen. Außerdem müssen gewünschte Eigenschaften wie NOT NULL erneut angegeben werden.

8. CHANGE COLUMN – Spalte umbenennen

Mit CHANGE COLUMN kann eine Spalte umbenannt und gleichzeitig neu definiert werden.

SQL-Code

ALTER TABLE kunden
CHANGE COLUMN telefon telefonnummer VARCHAR(30);

Die bisherige Spalte telefon heißt jetzt telefonnummer.

Weitere Möglichkeit: RENAME COLUMN

ALTER TABLE kunden
RENAME COLUMN stadt TO wohnort;

Mit RENAME COLUMN kann eine Spalte umbenannt werden, ohne ihren Datentyp erneut anzugeben.

Hinweis: RENAME COLUMN wird in MySQL ab Version 8.0 unterstützt.

9. DROP COLUMN – Spalte löschen

Mit DROP COLUMN wird eine Spalte vollständig aus der Tabelle entfernt.

SQL-Code

ALTER TABLE kunden
DROP COLUMN alter;

Die Spalte alter wird zusammen mit allen darin gespeicherten Werten gelöscht.

Wichtig: Beim Löschen einer Spalte gehen ihre gespeicherten Daten verloren. Vorher sollte eine Datensicherung erstellt werden.

10. DEFAULT – Standardwert festlegen

Mit DEFAULT wird ein Standardwert für eine Spalte festgelegt.

SQL-Code

ALTER TABLE kunden
ALTER COLUMN aktiv SET DEFAULT TRUE;

Wenn bei einem neuen Datensatz kein Wert für aktiv angegeben wird, verwendet MySQL den Standardwert TRUE.

Standardwert entfernen

ALTER TABLE kunden
ALTER COLUMN aktiv DROP DEFAULT;

11. NOT NULL – Pflichtfeld definieren

NOT NULL bedeutet, dass eine Spalte keinen NULL-Wert enthalten darf.

SQL-Code

ALTER TABLE kunden
MODIFY COLUMN email VARCHAR(150) NOT NULL;

Ab jetzt muss für jeden neuen Datensatz ein E-Mail-Wert vorhanden sein.

Achtung: Wenn bereits Datensätze mit NULL in der Spalte email existieren, muss man diese zuerst korrigieren, bevor NOT NULL gesetzt werden kann.

12. RENAME TABLE – Tabelle umbenennen

Mit RENAME TABLE wird der Name einer vorhandenen Tabelle geändert.

SQL-Code

RENAME TABLE kunden TO kunden_alt;

Die Tabelle kunden heißt danach kunden_alt. Die gespeicherten Datensätze bleiben erhalten.

Alternative mit ALTER TABLE

ALTER TABLE kunden_alt
RENAME TO kunden;

Damit wird die Tabelle wieder in kunden umbenannt.


13. DROP TABLE – Tabelle vollständig löschen

Mit DROP TABLE wird eine komplette Tabelle einschließlich ihrer Struktur und ihrer gespeicherten Daten gelöscht.

SQL-Code

DROP TABLE kunden;

Sicherere Variante bei unbekannter Existenz

DROP TABLE IF EXISTS kunden;

IF EXISTS verhindert einen Fehler, wenn die Tabelle nicht existiert. Es schützt jedoch nicht vor dem Löschen einer vorhandenen Tabelle.

Achtung: DROP TABLE entfernt die gesamte Tabelle. In einer produktiven Datenbank sollte dieser Befehl nur mit großer Vorsicht verwendet werden.

14. TRUNCATE TABLE – Alle Datensätze entfernen

Mit TRUNCATE TABLE werden alle Datensätze einer Tabelle entfernt. Die Tabellenstruktur bleibt erhalten.

SQL-Code

TRUNCATE TABLE kunden;

Nach diesem Befehl ist die Tabelle leer, kann aber weiterhin verwendet werden.

In MySQL setzt TRUNCATE normalerweise auch den AUTO_INCREMENT-Zähler zurück.

Wichtig: TRUNCATE ist in MySQL eine DDL-Anweisung und kann nicht wie ein normales DELETE innerhalb einer Transaktion zurückgerollt werden.

15. DELETE, TRUNCATE und DROP im Vergleich

Eigenschaft DELETE TRUNCATE DROP
Datensätze entfernen Ja Alle Alle
Tabellenstruktur bleibt Ja Ja Nein
WHERE möglich Ja Nein Nein
AUTO_INCREMENT zurücksetzen Normalerweise nein Normalerweise ja Tabelle wird entfernt
Rollback in MySQL Bei InnoDB in Transaktionen möglich Nein Nein

DELETE

DELETE FROM kunden
WHERE kunden_id = 3;

Nur der ausgewählte Datensatz wird gelöscht.

TRUNCATE

TRUNCATE TABLE kunden;

Alle Datensätze werden entfernt. Die Tabelle bleibt bestehen.

DROP

DROP TABLE kunden;

Die Tabelle wird vollständig entfernt.


16. Tabellenstruktur kontrollieren

Mit DESCRIBE oder SHOW COLUMNS kann die Struktur einer Tabelle überprüft werden.

SQL-Code

DESCRIBE kunden;

Alternative

SHOW COLUMNS FROM kunden;

Vollständige Tabellendefinition anzeigen

SHOW CREATE TABLE kunden;

SHOW CREATE TABLE zeigt die SQL-Anweisung, mit der die aktuelle Tabellenstruktur beschrieben wird.


17. Praktisches Gesamtbeispiel

In diesem Beispiel wird eine Testtabelle erstellt und anschließend schrittweise verändert.

Schritt 1: Tabelle erstellen

CREATE TABLE mitarbeiter_test (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

Schritt 2: Neue Spalte hinzufügen

ALTER TABLE mitarbeiter_test
ADD COLUMN gehalt DECIMAL(10,2);

Schritt 3: Weitere Spalte hinzufügen

ALTER TABLE mitarbeiter_test
ADD COLUMN abteilung VARCHAR(100) AFTER name;

Schritt 4: Spalte ändern

ALTER TABLE mitarbeiter_test
MODIFY COLUMN name VARCHAR(150) NOT NULL;

Schritt 5: Spalte umbenennen

ALTER TABLE mitarbeiter_test
CHANGE COLUMN gehalt monatsgehalt DECIMAL(10,2);

Schritt 6: Struktur überprüfen

DESCRIBE mitarbeiter_test;

Erwartete Tabellenstruktur

Spalte Datentyp
idINT
nameVARCHAR(150)
abteilungVARCHAR(100)
monatsgehaltDECIMAL(10,2)

Schritt 7: Testtabelle entfernen

DROP TABLE mitarbeiter_test;
Hinweis: Die einzelnen Schritte sollten in der angegebenen Reihenfolge ausgeführt werden.

18. Praktische Übungen

Verwenden Sie für die Übungen eine eigene Testtabelle.

Aufgabe 1

Fügen Sie der Tabelle kunden eine Spalte telefon vom Typ VARCHAR(30) hinzu.

Lösung anzeigen
ALTER TABLE kunden
ADD COLUMN telefon VARCHAR(30);

Aufgabe 2

Ändern Sie die Spalte name auf VARCHAR(200) NOT NULL.

Lösung anzeigen
ALTER TABLE kunden
MODIFY COLUMN name VARCHAR(200) NOT NULL;

Aufgabe 3

Fügen Sie eine Spalte geburtsdatum vom Typ DATE direkt hinter der Spalte name hinzu.

Lösung anzeigen
ALTER TABLE kunden
ADD COLUMN geburtsdatum DATE AFTER name;

Aufgabe 4

Entfernen Sie die Spalte telefon aus der Tabelle kunden.

Lösung anzeigen
ALTER TABLE kunden
DROP COLUMN telefon;

Aufgabe 5

Wie können alle Datensätze einer Tabelle entfernt werden, ohne die Tabellenstruktur zu löschen?

Lösung anzeigen
TRUNCATE TABLE kunden;

Alternativ können alle Zeilen mit DELETE FROM kunden gelöscht werden.

Aufgabe 6

Was ist der Unterschied zwischen DROP TABLE und TRUNCATE TABLE?

Lösung anzeigen

DROP TABLE entfernt die Tabelle einschließlich ihrer Struktur. TRUNCATE TABLE entfernt alle Datensätze, lässt die Tabellenstruktur jedoch bestehen.


19. Zusammenfassung

Mit ALTER TABLE wird die Struktur bestehender Tabellen verändert. ADD COLUMN fügt neue Spalten hinzu, MODIFY COLUMN verändert Spaltendefinitionen und DROP COLUMN entfernt Spalten.

RENAME TABLE benennt Tabellen um. DELETE entfernt Datensätze, TRUNCATE leert eine Tabelle und DROP TABLE entfernt eine Tabelle vollständig.