SQL Academy · Lektion

DEFAULT-värden och genererade kolumner

Ange DEFAULT-värden (NOW(), uuid_generate_v4(), 'pending') och beräkna värden direkt med kolumner av typen GENERATED ALWAYS AS.

Lektion 4 av 413 steg

DEFAULT-värden och genererade kolumner är en gratis lektion i SQL Academy på CoddyKit. Detta är lektion 4 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för SQL Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i SQL Academy innehåller totalt 4 lektioner.

DEFAULT: Fyll automatiskt i saknade värden

När INSERT utelämnar en kolumn används 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()
);

Vanliga DEFAULT-värden

Mönster som används överallt:

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'

Lägg till DEFAULT senare

Befintliga rader fylls inte i automatiskt – endast nya infogningar använder standardvärdet:

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

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

Lägg till NOT NULL med DEFAULT

PostgreSQL 11+ stöder snabb tilläggning av NOT NULL-kolumner med ett konstant DEFAULT – tabellen skrivs inte om:

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

Beräknade genererade kolumner (STORED)

En kolumn vars värde beräknas automatiskt från andra kolumner:

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

Genererad tsvector för fulltextsökning

Ett utmärkt användningsområde för STORED-genererade kolumner:

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

Virtuella genererade kolumner

PostgreSQL stöder i dag endast STORED (virtuella kolumner kommer i framtida versioner). Andra databaser, till exempel MySQL, stöder VIRTUAL-kolumner som beräknas vid SELECT-tidpunkten.

Det går inte att göra INSERT i genererade kolumner

Att försöka skriva till en sådan är ett fel — de beräknas, inte lagras av dig:

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

Sekvensbaserade standardvärden

SERIAL/BIGSERIAL är en förkortning för ”standardvärde från 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-kolumner

Standardsättet i SQL för att definiera en identity-kolumn:

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

-- GENERATED BY DEFAULT AS IDENTITY allows explicit overrides.

DEFAULT och affärslogik

Håll standardvärden enkla. Komplex logik hör hemma i programkoden eller i en BEFORE INSERT-trigger.

Sammanfattning

DEFAULT fyller i tomma värden; GENERATED beräknar ett värde utifrån andra kolumner.

  • NOW(), gen_random_uuid(), konstanta literaler
  • Beräknade STORED-kolumner passar utmärkt för härledda data
  • Identity-kolumner är det moderna mönstret för primärnycklar

Snabbkontroll

Vilken sats gör att en kolumn automatiskt fylls med den aktuella tiden vid INSERT om inget värde anges?

Gratis att börja

Lär dig SQL med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
46
Lektioner
183

Vanliga frågor

Är lektionen ”DEFAULT-värden och genererade kolumner” gratis?

Ja – hela texten till ”DEFAULT-värden och genererade kolumner” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i SQL Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i SQL Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”DEFAULT-värden och genererade kolumner”?

Ange DEFAULT-värden (NOW(), uuid_generate_v4(), 'pending') och beräkna värden direkt med kolumner av typen GENERATED ALWAYS AS. Ni övar på SQL Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig SQL Academy?

Du behöver inga förkunskaper. Utbildningen i SQL Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.

Hur lång tid tar lektionen ”DEFAULT-värden och genererade kolumner”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här SQL Academy-lektionen?

Ja. Varje SQL Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. NOT NULL- och CHECK-begränsningar
  2. UNIQUE-begränsningar och sammansatta nycklar
  3. FOREIGN KEY och referensåtgärder
  4. DEFAULT-värden och genererade kolumner
← Tillbaka till SQL Academy