CREATE TABLE — Tabelle erstellen
Mit CREATE TABLE wird eine neue Tabelle mit ihren Spalten, Datentypen und Constraints definiert:
CREATE TABLE kunden (
kundenid INT PRIMARY KEY IDENTITY,
vorname VARCHAR(50) NOT NULL,
nachname VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
land CHAR(2) DEFAULT 'CH',
geburtsjahr INT CHECK (geburtsjahr > 1900)
);
Wichtige Datentypen:
| Datentyp | Beschreibung | Beispiel |
|---|---|---|
INT | Ganzzahl | 42, -7, 0 |
DECIMAL(p,s) | Dezimalzahl (p Stellen, s Nachkomma) | 19.90, 1234.50 |
VARCHAR(n) | Text, variable Länge (max. n Zeichen) | 'Hallo', 'Meier' |
CHAR(n) | Text, fixe Länge (genau n Zeichen) | 'CH', 'DE' |
DATE | Datum | '2026-05-26' |
BIT | Wahrheitswert (0 oder 1) | 1 (= true) |
Constraints — Regeln für Spaltenwerte
Constraints erzwingen bestimmte Regeln beim Einfügen und Ändern von Daten:
| Constraint | Bedeutung |
|---|---|
PRIMARY KEY | Eindeutiger Bezeichner jeder Zeile — darf nicht NULL sein |
IDENTITY | Wert wird automatisch hochgezählt (Auto-Increment) |
NOT NULL | Spalte muss immer einen Wert enthalten — NULL verboten |
UNIQUE | Kein doppelter Wert erlaubt (z.B. E-Mail-Adresse) |
DEFAULT | Standardwert wenn kein Wert angegeben wird |
CHECK | Wert muss eine Bedingung erfüllen (z.B. alter > 0) |
FOREIGN KEY | Verknüpfung mit dem Primärschlüssel einer anderen Tabelle |
Merkhilfe: DDL verändert die Struktur (Tabellen), DML verändert die Daten (Zeilen). CREATE / ALTER / DROP vs. INSERT / UPDATE / DELETE.
FOREIGN KEY — Tabellen verknüpfen
Ein Fremdschlüssel stellt sicher, dass ein Wert in einer Spalte immer in der referenzierten Tabelle existiert. Das nennt man referentielle Integrität.
CREATE TABLE bestellungen (
bestellid INT PRIMARY KEY IDENTITY,
bestelldatum DATE NOT NULL,
kundenid INT NOT NULL,
CONSTRAINT fk_bestell_kunde
FOREIGN KEY (kundenid)
REFERENCES kunden(kundenid)
ON DELETE CASCADE
);
Ein INSERT in bestellungen mit einer kundenid, die in kunden nicht existiert, schlägt fehl — der Fremdschlüssel verhindert das.
| Option | Verhalten |
|---|---|
ON DELETE CASCADE | Löschen des Parent-Datensatzes löscht automatisch alle Child-Datensätze |
ON UPDATE CASCADE | Änderung am Primärschlüssel wird automatisch an alle Child-Datensätze weitergegeben |
ALTER TABLE & DROP TABLE
Mit ALTER TABLE kann eine bestehende Tabelle nachträglich verändert werden:
-- Neue Spalte hinzufügen
ALTER TABLE kunden ADD telefon VARCHAR(20);
-- Spalte löschen
ALTER TABLE kunden DROP COLUMN telefon;
-- Datentyp einer Spalte ändern
ALTER TABLE kunden ALTER COLUMN nachname VARCHAR(100);
-- Constraint nachträglich hinzufügen
ALTER TABLE kunden
ADD CONSTRAINT chk_land CHECK (land IN ('CH', 'DE', 'AT'));
-- Fremdschlüssel hinzufügen
ALTER TABLE bestellungen
ADD CONSTRAINT fk_bestell_kunde
FOREIGN KEY (kundenid) REFERENCES kunden(kundenid);
DROP TABLE löscht eine Tabelle unwiderruflich — Struktur und alle Daten sind weg:
-- Tabelle vollständig löschen
DROP TABLE bestellungen;
ON DELETE CASCADE setzen. Sonst schlägt der DROP mit einem FK-Fehler fehl.