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.
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 beforeBeregnede 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-filledGenerert 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 DEFAULTSekvensbaserte 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?
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
- NOT NULL- og CHECK-betingelser
- UNIQUE-betingelser og sammensatte nøkler
- FOREIGN KEY og referansehandlinger
- DEFAULT-verdier og genererte kolonner