Heute schauen wir uns einen weiteren wichtigen Aspekt beim Arbeiten mit Datenbanken genauer an – wie man Daten in Tabellen einfügt, die NOT NULL und DEFAULT Einschränkungen haben. An diesem Punkt kennst du schon den grundlegenden Syntax von INSERT INTO und weißt, wie man Zeilen in Tabellen mit bestimmter Struktur einfügt. Jetzt wird’s Zeit, tiefer einzusteigen – denn der Umgang mit Einschränkungen ist oft eine echte Kopfschmerzquelle für Entwickler:innen. Aber keine Sorge, am Ende der Vorlesung hast du das locker drauf!
Was sind Einschränkungen?
Einschränkungen sind Regeln, die auf Tabellenspalten angewendet werden. Sie helfen, die Daten logisch korrekt zu halten. Zum Beispiel: Ein Feld, das unbedingt Daten enthalten muss (NOT NULL), darf nicht leer bleiben. Oder: Du kannst einen Wert für eine Spalte weglassen, wenn ein Default-Wert (DEFAULT) festgelegt ist.
Arten von Einschränkungen: - NOT NULL – sagt, dass die Spalte kein NULL enthalten darf. - DEFAULT – legt einen Wert fest, der automatisch eingefügt wird, wenn du keinen angibst.
Einschränkungen helfen, die Datenintegrität zu wahren. Stell dir vor, du speicherst eine Liste von Studierenden in einer Tabelle students und eine der Regeln ist: Jeder Student muss einen Namen haben (NOT NULL). Ohne diese Einschränkung vergisst vielleicht jemand, den Namen einzutragen, und plötzlich hast du einen „namenlosen Studenten“ in der Datenbank. Oder ein anderes Beispiel: Du entscheidest, dass die Standardanzahl der Credits für einen neuen Kurs 0 sein soll (DEFAULT), damit du nicht jedes Mal daran denken musst.
Arbeiten mit der Einschränkung NOT NULL
Die Einschränkung NOT NULL zwingt dich, beim Einfügen eines Datensatzes einen Wert für diese Spalte anzugeben. Versuchst du, NULL einzufügen oder lässt die Spalte einfach weg, ist die Datenbank „beleidigt“ (es gibt einen Fehler). Schauen wir uns ein Beispiel an.
Wir erstellen eine einfache Tabelle students:
CREATE TABLE students (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL, -- Name darf nicht leer sein
age INT
);
Achte darauf: Die Spalte name hat die Einschränkung NOT NULL, die Spalte age dagegen nicht.
Beispiel für das Einfügen von Daten mit NOT NULL
Jetzt versuchen wir, Studierende hinzuzufügen:
-- Erfolgreiches Einfügen
INSERT INTO students (name, age) VALUES ('Alice', 23);
-- Erfolg: Name ist angegeben, Feld erfüllt die NOT NULL-Einschränkung
-- Fehlerbeispiel:
INSERT INTO students (age) VALUES (30);
-- Fehler: Feld name darf nicht NULL sein, da es NOT NULL hat
Wenn du einen Fehler wie null value in column "name" violates not-null constraint bekommst, keine Panik – PostgreSQL will dich nur daran erinnern, besser aufzupassen.
Default-Werte (DEFAULT) verwenden
Die Einschränkung DEFAULT sagt der Datenbank: „Falls jemand vergisst, einen Wert für diese Spalte anzugeben, nimm einfach diesen Wert.“ Das macht das Leben für Entwickler:innen leichter, weil du nicht jede Zeile komplett ausfüllen musst.
Beispiel für eine Tabelle mit DEFAULT-Einschränkung
Wir erstellen die Tabelle courses:
CREATE TABLE courses (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
credits INT DEFAULT 0 -- Standardwert für credits ist 0
);
Beispiel für das Einfügen von Daten mit DEFAULT
Jetzt fügen wir Kurse hinzu:
-- Wert für credits explizit angegeben
INSERT INTO courses (name, credits) VALUES ('Mathematics', 5);
-- Wert für credits nicht angegeben – Default (0) wird verwendet
INSERT INTO courses (name) VALUES ('History');
-- Schauen wir uns das Ergebnis an
SELECT * FROM courses;
Ergebnis:
| id | name | credits |
|---|---|---|
| 1 | Mathematics | 5 |
| 2 | History | 0 |
Achte darauf: Beim Hinzufügen des Kurses History haben wir keine Credits angegeben. PostgreSQL hat die Spalte credits automatisch mit 0 gefüllt.
Kombinierte Nutzung von NOT NULL und DEFAULT
Solche Spalten verlangen immer einen Wert, auch wenn du keinen angibst. Zum Beispiel kann in der Tabelle courses die Spalte credits sowohl DEFAULT als auch NOT NULL haben, damit niemand versehentlich NULL einträgt.
CREATE TABLE courses (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
credits INT NOT NULL DEFAULT 0
);
Beispiel für das Einfügen von Daten
Stell dir vor, jeder neu angelegte Kurs soll standardmäßig 0 Credits haben, aber NULL ist nicht erlaubt.
-- Erfolgreich: Credits nehmen den Default-Wert an
INSERT INTO courses (name) VALUES ('Physics');
-- Fehler: Versuch, explizit NULL in eine NOT NULL-Spalte einzufügen
INSERT INTO courses (name, credits) VALUES ('Chemistry', NULL);
Beispiel: Einen Studenten mit Pflichtnamen hinzufügen
Wir erstellen die Tabelle students mit Einschränkungen:
CREATE TABLE students (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL, -- Name ist Pflicht
enrollment_date DATE DEFAULT CURRENT_DATE -- Einschreibedatum standardmäßig heute
);
Jetzt fügen wir Studierende hinzu:
-- Name angegeben, Einschreibedatum wird automatisch gesetzt
INSERT INTO students (name) VALUES ('Bob');
-- Versuch ohne Name (gibt einen Fehler)
INSERT INTO students (enrollment_date) VALUES ('2024-10-01');
Ein super Beispiel dafür, wie PostgreSQL hilft, korrekte Daten zu garantieren: Alle Studierenden haben einen Namen, das Einschreibedatum muss nicht explizit angegeben werden.
Tipps und Stolperfallen
Wenn du mit NOT NULL und DEFAULT arbeitest, solltest du ein paar Dinge im Kopf behalten. Zum Beispiel: Wenn in deinen Daten oft NULL vorkommt, kann NOT NULL echt nervig werden. Und wenn du für alle Spalten einen Default-Wert festlegst, bekommst du vielleicht ungewollte Daten (z.B. 0 statt eines echten Werts).
Normalerweise, wenn du eine neue Spalte zu einer bestehenden Tabelle hinzufügst, werden die Zellen für die alten Zeilen mit NULL gefüllt. Wenn du aber DEFAULT X angibst, wird die ganze Spalte mit X gefüllt. Das ist ziemlich praktisch und hilft, die Datenbank konsistent zu halten.
Zum Beispiel: Die neue Spalte ist ein FOREIGN KEY auf eine bestehende Tabelle. Sie darf nicht NULL oder 0 sein, sondern muss auf existierende Zeilen der anderen Tabelle zeigen.
Was tun, wenn du Einschränkungen vergessen hast?
Kein Stress – du kannst Einschränkungen jederzeit später mit ALTER TABLE hinzufügen. Zum Beispiel:
-- DEFAULT-Einschränkung zu einer bestehenden Spalte hinzufügen
ALTER TABLE courses ALTER COLUMN credits SET DEFAULT 0;
-- NOT NULL-Einschränkung zu einer bestehenden Spalte hinzufügen
ALTER TABLE students ALTER COLUMN name SET NOT NULL;
Diese Befehle machen deine bestehenden Daten nicht kaputt – du kannst sie auch auf Tabellen anwenden, in denen schon wichtige Daten stecken.
Jetzt bist du bereit, die Power von PostgreSQL für Constraints zu nutzen! Deine Daten werden strukturierter und besser vor Fehlern geschützt, und deine Abfragen werden logisch und vorhersehbar.
GO TO FULL VERSION