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_id | INT |
| name | VARCHAR(100) |
| stadt | VARCHAR(100) |
| alter | INT |
| VARCHAR(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 |
|---|---|
| 1 | anrede |
| 2 | kunden_id |
| 3 | name |
| 4 | stadt |
| 5 | alter |
| 6 |
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.
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.
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.
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.
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.
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.
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.
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 |
|---|---|
| id | INT |
| name | VARCHAR(150) |
| abteilung | VARCHAR(100) |
| monatsgehalt | DECIMAL(10,2) |
Schritt 7: Testtabelle entfernen
DROP TABLE mitarbeiter_test;
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.