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.
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 beforeBerä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-filledGenererad 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 DEFAULTSekvensbaserade 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?
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
- NOT NULL- och CHECK-begränsningar
- UNIQUE-begränsningar och sammansatta nycklar
- FOREIGN KEY och referensåtgärder
- DEFAULT-värden och genererade kolumner