NOT NULL
Constraints & Struktur
Der Constraint NOT NULL stellt sicher, dass eine Spalte immer einen Wert enthalten muss. Ohne ihn dürfte eine Spalte den speziellen Wert NULL annehmen – das bedeutet „unbekannt“ oder „kein Wert“. Mit NOT NULL erzwingst du eine Angabe.
Syntax beim Anlegen
Du hängst NOT NULL einfach hinter den Datentyp:
CREATE TABLE Kunden ( KundenID INT PRIMARY KEY, Name VARCHAR(100) NOT NULL, Stadt VARCHAR(50), Land CHAR(2) NOT NULL );
Hier müssen Name und Land immer befüllt sein. Stadt darf dagegen leer (NULL) bleiben.
Was passiert bei Verstoß?
Dieser Versuch wird abgelehnt, weil Name fehlt:
INSERT INTO Kunden (KundenID, Land) VALUES (5, 'DE'); -- Fehler: Spalte 'Name' darf nicht NULL sein
NOT NULL nachträglich setzen
Mit ALTER TABLE kannst du eine bestehende Spalte verpflichtend machen:
- MySQL:
ALTER TABLE Kunden MODIFY Stadt VARCHAR(50) NOT NULL; - PostgreSQL:
ALTER TABLE Kunden ALTER COLUMN Stadt SET NOT NULL;
Stolperfalle
NULL ist nicht dasselbe wie eine leere Zeichenkette '' oder die Zahl 0. Eine leere Zeichenkette ist ein gültiger Wert und verstößt nicht gegen NOT NULL. Willst du auch leere Strings verhindern, brauchst du zusätzlich einen CHECK-Constraint. Beachte außerdem: In Vergleichen verhält sich NULL besonders – WHERE Stadt = NULL liefert nie Treffer, du musst WHERE Stadt IS NULL schreiben.