FOREIGN KEY
Constraints & Struktur
Ein FOREIGN KEY (Fremdschlüssel) verbindet zwei Tabellen miteinander. Er verweist auf den PRIMARY KEY einer anderen Tabelle und sichert so die referenzielle Integrität: Es kann keine Bestellung für einen Kunden geben, den es gar nicht gibt.
Beispiel: Bestellungen verweist auf Kunden
Die Spalte Bestellungen.KundenID soll auf Kunden.KundenID verweisen:
CREATE TABLE Bestellungen ( BestellID INT PRIMARY KEY, KundenID INT, ProduktID INT, Menge INT, Bestelldatum DATE, FOREIGN KEY (KundenID) REFERENCES Kunden(KundenID) );
Jetzt akzeptiert die Datenbank in Bestellungen.KundenID nur Werte, die in Kunden.KundenID tatsächlich existieren.
Was passiert bei Verstoß?
INSERT INTO Bestellungen VALUES (10, 999, 1, 2, '2026-06-19'); -- Fehler: KundenID 999 existiert nicht in Kunden
ON DELETE / ON UPDATE
Du kannst festlegen, was passiert, wenn ein referenzierter Kunde gelöscht wird:
FOREIGN KEY (KundenID) REFERENCES Kunden(KundenID) ON DELETE CASCADE ON UPDATE CASCADE
CASCADE– löscht/ändert die abhängigen Bestellungen mit.SET NULL– setztKundenIDin Bestellungen auf NULL.RESTRICT/NO ACTION– verhindert das Löschen des Kunden.
Stolperfalle
Die referenzierte Spalte (Kunden.KundenID) muss PRIMARY KEY oder UNIQUE sein – sonst lehnt die Datenbank den Fremdschlüssel ab. In MySQL funktionieren Fremdschlüssel zudem nur mit der Storage-Engine InnoDB, nicht mit MyISAM. Achte darauf, dass die Datentypen beider Spalten übereinstimmen, sonst lässt sich die Beziehung nicht anlegen.