CodeGym /Kurse /SQL SELF /Verwendung von DEFAULT für Standardwerte

Verwendung von DEFAULT für Standardwerte

SQL SELF
Level 17 , Lektion 2
Verfügbar

Manchmal will man nicht alle Felder von Hand ausfüllen – entweder weil man faul ist oder weil die Daten einfach nicht da sind. In solchen Fällen kann man Standardwerte vorher festlegen, damit die Datenbank sie automatisch einsetzt, wenn nötig.

Einfügen von Zeilen in eine Tabelle

Standardwerte hängen eng mit dem Einfügen von Zeilen in eine Tabelle zusammen. Deshalb erzähle ich jetzt kurz darüber, und in ein paar Lektionen kommen wir nochmal ausführlicher darauf zurück.

Zeilen in eine Tabelle einzufügen ist super easy – dafür gibt’s das spezielle Kommando INSERT INTO. INSERT INTO ist ein SQL-Operator, der neue Zeilen in eine Tabelle einfügt. Das ist einer der meistgenutzten Befehle, vor allem wenn du mit Web-Formularen, Logs, User-Registrierung oder Daten-Updates arbeitest.

Syntax vom Befehl

INSERT INTO tabelle (spalte1, spalte2, ...)
VALUES (wert1, wert2, ...);

Erklärung:

  • tabelle – Name der Tabelle, in die die Daten eingefügt werden.
  • spalte1, spalte2, ... – Aufzählung der Spalten (kannst du weglassen, wenn du für alle Spalten Werte in der richtigen Reihenfolge angibst).
  • wert1, wert2, ... – Werte, die zu den genannten Spalten passen.

Einfaches Beispiel

INSERT INTO users (name, email)
VALUES ('Alice', 'alice@example.com');

Fügt der Tabelle users eine Zeile hinzu: Name – "Alice", Email – "alice@example.com".

Ergebnis:

id name email
1 Alice alice@example.com

Mehrere Zeilen auf einmal einfügen

Du kannst auch mehrere Einträge mit einem einzigen Query einfügen – das ist schneller und effizienter.

INSERT INTO users (name, email)
VALUES 
  ('Alice', 'alice@example.com'),
  ('Bob', 'bob@example.net'),
  ('Charlie', 'charlie@example.org'),
  ('Diana', 'diana@example.com'),
  ('Eve', 'eve@example.net');

Und so sieht das Ergebnis aus:

id name email
1 Alice alice@example.com
2 Bob bob@example.net
3 Charlie charlie@example.org
4 Diana diana@example.com
5 Eve eve@example.net

Standardwert

Erinnerst du dich an die Syntax zum Einfügen von Zeilen?

INSERT INTO tabelle (spalte1, spalte2, ...)
VALUES (wert1, wert2, ...);

Warum gibt’s da eigentlich die Spaltenliste: spalte1, spalte2? Man könnte doch einfach die Werte in der gleichen Reihenfolge wie die Spalten angeben, oder?

Der Punkt ist: Viele Werte muss man gar nicht angeben beim Einfügen. Zum Beispiel berechnet PostgreSQL die ID einer neuen Zeile selbst. Auch das aktuelle Datum/Uhrzeit kann automatisch eingetragen werden. Wenn du keine Daten für eine Spalte angibst, setzt PostgreSQL sie auf NULL.

PostgreSQL kann dir da echt viel Arbeit abnehmen. Und du kannst das steuern – dafür gibt’s Standardwerte, die du mit dem Keyword DEFAULT festlegst.

Der Standardwert wird verwendet, wenn beim Einfügen für eine bestimmte Spalte kein Wert angegeben wird. Das spart nicht nur Zeit, sondern verhindert auch Fehler wie das Vergessen eines wichtigen Wertes.

Wie funktioniert DEFAULT?

Schauen wir uns die Syntax an. Standardwerte werden beim Erstellen der Tabelle festgelegt. Das ist das allgemeine Format:

CREATE TABLE tabelle (
    spalte datentyp DEFAULT standardwert
);

Oder falls du einen Standardwert für eine bestehende Tabelle hinzufügen willst:

ALTER TABLE tabelle
ALTER COLUMN spalte
SET DEFAULT standardwert;

Mehr dazu, wie man Tabellen ändert, gibt’s in ein paar Lektionen :P

Beispiel 1: Tabelle mit DEFAULT-Feld

Wir erstellen eine Tabelle students, in der jeder Student automatisch ein Registrierungsdatum bekommt:

CREATE TABLE students (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    registration_date DATE DEFAULT CURRENT_DATE
);

Wenn du jetzt einen neuen Studenten ohne registration_date einfügst, setzt PostgreSQL das Feld automatisch auf das aktuelle Datum.

INSERT INTO students (name) VALUES ('Alex Lin');

Bei der Abfrage:

SELECT * FROM students;

bekommst du folgendes Ergebnis:

id name registration_date
1 Alex Lin 2023-10-15

Praktische Beispiele

Standardwert für eine Zahlenspalte

Angenommen, wir haben eine Tabelle grades, in der die Spalte grade standardmäßig 0 sein soll, falls noch keine Note vergeben wurde.

CREATE TABLE grades (
    id SERIAL PRIMARY KEY,
    student_id INTEGER NOT NULL,
    course_id INTEGER NOT NULL,
    grade INTEGER DEFAULT 0
);

Wir fügen einen Eintrag ohne grade hinzu:

INSERT INTO grades (student_id, course_id) VALUES (1, 101);

Jetzt sieht die Tabelle so aus:

id student_id course_id grade
1 1 101 0

Verwendung von TEXT mit Standardwert

Stell dir eine Tabelle teachers vor, in der jedem Lehrer beim Hinzufügen automatisch der Status „nicht bestätigt“ zugewiesen wird.

CREATE TABLE teachers (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    status TEXT DEFAULT 'unverified'
);

Wir fügen einen Lehrer ohne Status hinzu:

INSERT INTO teachers (name) VALUES ('Peter Pall');

Das Ergebnis sieht so aus:

id name status
1 Peter Pall unverified

Standardwerte für Zeit

Für die Tabelle meetings, in der Meeting-Daten gespeichert werden, kann man das Feld meeting_time mit einer Standard-Startzeit von 10:00 Uhr anlegen.

CREATE TABLE meetings (
    id SERIAL PRIMARY KEY,
    topic VARCHAR(100),
    meeting_time TIME DEFAULT '10:00'
);

Wir fügen einen Eintrag hinzu:

INSERT INTO meetings (topic) VALUES ('Projektbesprechung');

Ergebnis:

id topic meeting_time
1 Projektbesprechung 10:00

Typische Fehler bei der Verwendung von DEFAULT

Datentyp passt nicht zum Standardwert. Wenn du versuchst, einen Textwert für eine Zahlenspalte zu setzen, meckert PostgreSQL:

CREATE TABLE beispiel (
    number INTEGER DEFAULT 'text'
);

Fehler: invalid input syntax for type integer.

Ändern von DEFAULT ohne die bestehenden Einträge zu beachten. Wenn du den Standardwert änderst, betrifft das nicht die schon vorhandenen Zeilen – die bleiben wie sie sind. Wenn du bestehende Zeilen aktualisieren willst, nutze UPDATE.

UPDATE students SET registration_date = '2023-01-01' WHERE registration_date IS NULL;

Verwechslung von DEFAULT und NOT NULL. Ein Standardwert heißt nicht, dass das Feld automatisch Pflichtfeld ist (NOT NULL). Ohne NOT NULL kann die Spalte trotzdem NULL sein.

2
Aufgabe
SQL SELF, Level 17, Lektion 2
Gesperrt
Erstellen einer Tabelle mit Verwendung von `DEFAULT` für einen Zahlenwert
Erstellen einer Tabelle mit Verwendung von `DEFAULT` für einen Zahlenwert
2
Aufgabe
SQL SELF, Level 17, Lektion 2
Gesperrt
Verwendung mehrerer Spalten mit `DEFAULT`-Wert
Verwendung mehrerer Spalten mit `DEFAULT`-Wert
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION