Ein NOT NULL-Constraint legt fest, dass eine Spalte keinen NULL-Wert enthalten darf. Es ist die einfachste Datenbankregel für Pflichtfelder: Wer einen Namen, eine E-Mail-Adresse oder einen Preis speichern will, muss dafür einen Wert liefern.
Was bedeutet NULL?
NULL ist kein Wert, sondern der Zustand „kein Wert vorhanden". NULL ist weder 0 noch eine leere Zeichenkette — ein Preis von 0 ist ein Wert, ein Preis von NULL ist unbekannt. In Abfragen prüft man NULL deshalb nicht mit =, sondern mit IS NULL beziehungsweise IS NOT NULL.
NOT NULL beim Tabellenaufbau
CREATE TABLE kunden (
id INT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(255) NOT NULL
);
Ein INSERT ohne Wert für eine NOT NULL-Spalte schlägt fehl (im SQL-Standard-Modus) beziehungsweise liefert einen Fehler, wenn kein Standardwert definiert ist. So bleiben die Daten vollständig und auswertbar.
NOT NULL nachträglich setzen
Bereits bestehende Tabellen lassen sich per ALTER TABLE anpassen. PostgreSQL prüft dabei sofort die vorhandenen Daten — enthält die Spalte NULL-Werte, schlägt der Befehl fehl, bis die Daten bereinigt sind:
ALTER TABLE kunden ALTER COLUMN email SET NOT NULL;
In MySQL lautet die Variante:
ALTER TABLE kunden MODIFY COLUMN email VARCHAR(255) NOT NULL;
Zusammenspiel mit anderen Constraints
NOT NULL gehört zusammen mit UNIQUE, CHECK und den Primär- und Fremdschlüsseln zur Integrität des Datenbankschemas. Ein Primärschlüssel ist zum Beispiel automatisch NOT NULL, und ein UNIQUE-Constraint auf eine Pflichtspalte kombiniert man sinnvoll mit NOT NULL. Die SQL-Grundlagen zeigen, wie solche Tabellen angelegt und abgefragt werden.