SQL Academy · leksjon

DEFAULT-verdier og genererte kolonner

Angi DEFAULT-verdier (NOW(), uuid_generate_v4(), 'pending'), og beregn verdier fortløpende med kolonner som bruker GENERATED ALWAYS AS.

Leksjon 4 av 413 trinn

DEFAULT-verdier og genererte kolonner er en gratis leksjon i SQL Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i SQL Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i SQL Academy inneholder totalt 4 leksjoner.

DEFAULT: Fyll automatisk inn manglende verdier

Når INSERT utelater en kolonne, brukes DEFAULT:

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()
);

Vanlige DEFAULT-verdier

Mønstre du kommer til å bruke overalt:

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'

Legge til en DEFAULT senere

Eksisterende rader fylles ikke automatisk med standardverdien – bare nye innsettinger bruker den:

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

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

Legge til NOT NULL med DEFAULT

PostgreSQL 11+ støtter rask tillegging av NOT NULL-kolonner med en konstant DEFAULT – tabellen skrives ikke om:

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

Beregnede genererte kolonner (STORED)

En kolonne der verdien beregnes automatisk fra andre kolonner:

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

Generert tsvector for fulltekstsøk

En svært nyttig bruk av STORED-genererte kolonner:

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 genererte kolonner

PostgreSQL støtter foreløpig bare STORED (virtuelle kolonner kommer i fremtidige versjoner). Andre databaser (MySQL) støtter VIRTUAL-kolonner som beregnes ved SELECT-tidspunktet.

Du kan ikke bruke INSERT på genererte kolonner

Det er en feil å forsøke å skrive til en slik kolonne – verdien beregnes, den lagres ikke av Dem:

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

Sekvensbaserte standardverdier

SERIAL/BIGSERIAL er en kortform for «standardverdi fra en sekvens»:

-- 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-kolonner

Standardmåten i SQL for å definere en identity-kolonne:

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

-- GENERATED BY DEFAULT AS IDENTITY allows explicit overrides.

DEFAULT og forretningslogikk

Hold standardverdier enkle. Kompleks logikk hører hjemme i appkoden eller i en BEFORE INSERT-trigger.

Oppsummering

DEFAULT fyller inn manglende verdier; GENERATED beregner en verdi fra andre kolonner.

  • NOW(), gen_random_uuid(), konstante litteraler
  • BEREGNEDE STORED-kolonner egner seg godt for avledede data
  • Identity-kolonner er det moderne mønsteret for PK

Rask kontroll

Hvilken klausul fyller automatisk inn gjeldende tidspunkt i en kolonne ved INSERT når ingen verdi er oppgitt?

Gratis å komme i gang

Lær deg SQL med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
46
Leksjoner
183

Ofte stilte spørsmål

Er leksjonen «DEFAULT-verdier og genererte kolonner» gratis?

Ja – hele teksten i «DEFAULT-verdier og genererte kolonner» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av SQL Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i SQL Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «DEFAULT-verdier og genererte kolonner»?

Angi DEFAULT-verdier (NOW(), uuid_generate_v4(), 'pending'), og beregn verdier fortløpende med kolonner som bruker GENERATED ALWAYS AS. Du øver på SQL Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med SQL Academy?

Ingen tidligere erfaring er nødvendig. SQL Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.

Hvor lang tid tar leksjonen «DEFAULT-verdier og genererte kolonner»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne SQL Academy-leksjonen?

Ja. Alle SQL Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. NOT NULL- og CHECK-betingelser
  2. UNIQUE-betingelser og sammensatte nøkler
  3. FOREIGN KEY og referansehandlinger
  4. DEFAULT-verdier og genererte kolonner
← Tilbake til SQL Academy