0Pricing
SQL Academy · Lektion

DEFAULT-Werte und generierte Spalten

Legen Sie DEFAULTs fest (NOW(), uuid_generate_v4(), 'pending') und berechnen Sie Werte automatisch mit Spalten vom Typ GENERATED ALWAYS AS.

DEFAULT-Werte und generierte Spalten ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des SQL Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

DEFAULT: Fehlende Werte automatisch ausfüllen

Wenn INSERT eine Spalte auslässt, wird DEFAULT verwendet:

CREATE TABLE users (
  id BIGSERIAL PRIMARY KEY,
  email VARCHAR(255) NOT NULL,
  status TEXT NOT NULL DEFAULT 'active',
  created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

Häufige DEFAULT-Werte

Muster, die Sie überall verwenden werden:

created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
id UUID PRIMARY KEY DEFAULT gen_random_uuid()
is_active BOOLEAN NOT NULL DEFAULT true
status TEXT NOT NULL DEFAULT 'pending'

DEFAULT nachträglich hinzufügen

Vorhandene Zeilen werden standardmäßig nicht nachträglich befüllt – nur neue Inserts verwenden den Standardwert:

ALTER TABLE users ALTER COLUMN status SET DEFAULT 'active';

-- For existing rows, backfill manually:
UPDATE users SET status = 'active' WHERE status IS NULL;

NOT NULL mit DEFAULT hinzufügen

PostgreSQL 11+ unterstützt das schnelle Hinzufügen von NOT-NULL-Spalten mit einem konstanten DEFAULT-Wert – die Tabelle wird dabei nicht neu geschrieben:

ALTER TABLE users
  ADD COLUMN signup_source TEXT NOT NULL DEFAULT 'web';
-- Fast in PG 11+, slow before

Berechnete generierte Spalten (STORED)

Eine Spalte, deren Wert automatisch aus anderen Spalten berechnet wird:

CREATE TABLE orders (
  id BIGSERIAL PRIMARY KEY,
  qty INT NOT NULL,
  unit_price NUMERIC(10,2) NOT NULL,
  total NUMERIC(12,2) GENERATED ALWAYS AS (qty * unit_price) STORED
);

INSERT INTO orders (qty, unit_price) VALUES (3, 9.99);
SELECT * FROM orders;       -- total is auto-filled

Generierter tsvector für die Volltextsuche

Eine hervorragende Anwendung für generierte STORED-Spalten:

ALTER TABLE articles
  ADD COLUMN search_doc tsvector
    GENERATED ALWAYS AS (to_tsvector('english', title || ' ' || body)) STORED;
CREATE INDEX articles_search_idx ON articles USING GIN(search_doc);

Virtuelle generierte Spalten

PostgreSQL unterstützt derzeit nur STORED-Spalten (virtuelle Spalten sollen in zukünftigen Versionen folgen). Andere Datenbanken wie MySQL unterstützen VIRTUAL-Spalten, deren Wert zum Zeitpunkt des SELECT berechnet wird.

In generierte Spalten können Sie nicht INSERTen

Der Versuch, in eine solche Spalte zu schreiben, ist ein Fehler – ihr Wert wird berechnet und nicht von Ihnen gespeichert:

INSERT INTO orders (qty, unit_price, total) VALUES (3, 9.99, 30);
-- ERROR: column "total" can only be updated to DEFAULT

Sequenzbasierte Standardwerte

SERIAL/BIGSERIAL ist eine Kurzform für „Standardwert aus einer Sequenz“:

-- Roughly equivalent:
CREATE TABLE t (id BIGSERIAL PRIMARY KEY);

-- =>
CREATE SEQUENCE t_id_seq;
CREATE TABLE t (id BIGINT PRIMARY KEY DEFAULT nextval('t_id_seq'));
ALTER SEQUENCE t_id_seq OWNED BY t.id;

IDENTITY-Spalten

Die standardmäßige SQL-Methode zum Definieren einer Identität:

CREATE TABLE t (
  id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  name TEXT
);

-- GENERATED BY DEFAULT AS IDENTITY allows explicit overrides.

DEFAULT und Geschäftslogik

Halten Sie Standardwerte einfach. Komplexe Logik gehört in den Anwendungscode oder in einen BEFORE INSERT-Trigger.

Zusammenfassung

DEFAULT füllt fehlende Werte auf; GENERATED berechnet Werte aus anderen Spalten.

  • NOW(), gen_random_uuid(), konstante Literale
  • Berechnete STORED-Spalten eignen sich hervorragend für abgeleitete Daten
  • IDENTITY-Spalten sind das moderne Muster für Primärschlüssel

Kurzer Test

Welche Klausel füllt eine Spalte bei INSERT automatisch mit der aktuellen Zeit, wenn kein Wert angegeben wird?

Häufig gestellte Fragen

Ist die Lektion „DEFAULT-Werte und generierte Spalten“ kostenlos?

Ja — der vollständige Text von „DEFAULT-Werte und generierte Spalten“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „DEFAULT-Werte und generierte Spalten“?

Legen Sie DEFAULTs fest (NOW(), uuid_generate_v4(), 'pending') und berechnen Sie Werte automatisch mit Spalten vom Typ GENERATED ALWAYS AS. Du übst SQL Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um SQL Academy zu starten?

Keine Vorkenntnisse erforderlich. SQL Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „DEFAULT-Werte und generierte Spalten“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser SQL Academy-Lektion Code schreiben und ausführen?

Ja. Jede SQL Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. NOT-NULL- und CHECK-Constraints
  2. UNIQUE-Constraints und zusammengesetzte Schlüssel
  3. FOREIGN KEY und referenzielle Aktionen
  4. DEFAULT-Werte und generierte Spalten
← Zurück zu SQL Academy