DDL — Tabellen erstellen
M164 Block 5 von 5 — CREATE, ALTER, DROP
DDL (Data Definition Language) definiert die Struktur der Datenbank — Tabellen, Spalten, Datentypen und Constraints. DDL verändert keine Daten, sondern den Aufbau.

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:

DatentypBeschreibungBeispiel
INTGanzzahl42, -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'
DATEDatum'2026-05-26'
BITWahrheitswert (0 oder 1)1 (= true)

Constraints — Regeln für Spaltenwerte

Constraints erzwingen bestimmte Regeln beim Einfügen und Ändern von Daten:

ConstraintBedeutung
PRIMARY KEYEindeutiger Bezeichner jeder Zeile — darf nicht NULL sein
IDENTITYWert wird automatisch hochgezählt (Auto-Increment)
NOT NULLSpalte muss immer einen Wert enthalten — NULL verboten
UNIQUEKein doppelter Wert erlaubt (z.B. E-Mail-Adresse)
DEFAULTStandardwert wenn kein Wert angegeben wird
CHECKWert muss eine Bedingung erfüllen (z.B. alter > 0)
FOREIGN KEYVerknü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.

OptionVerhalten
ON DELETE CASCADELö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;
Zuerst Tabellen mit Fremdschlüsseln auf diese Tabelle löschen — oder ON DELETE CASCADE setzen. Sonst schlägt der DROP mit einem FK-Fehler fehl.