UNIQUE-begränsningar och sammansatta nycklar
Säkerställ unikhet för en eller flera kolumner, förstå NULL i unika index och använd sammansatt unikhet för naturliga nycklar.
UNIQUE-begränsningar och sammansatta nycklar är en gratis lektion i SQL Academy på CoddyKit. Detta är lektion 2 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.
UNIQUE: Inga dubbletter tillåtna
En UNIQUE-begränsning förbjuder två rader att ha samma värde i de kolumner som omfattas av begränsningen:
CREATE TABLE users (
id BIGSERIAL PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE,
username VARCHAR(50) UNIQUE
);UNIQUE skapar ett index
En UNIQUE-begränsning implementeras med ett unikt B-trädsindex, så uppslag på den kolumnen går snabbt.
-- This shows the implicit index:
SELECT indexname FROM pg_indexes WHERE tablename = 'users';Sammansatt UNIQUE
Unikhet över en kombination av kolumner:
CREATE TABLE memberships (
user_id BIGINT NOT NULL,
group_id BIGINT NOT NULL,
role TEXT NOT NULL,
UNIQUE (user_id, group_id) -- a user can be in a group at most once
);UNIQUE jämfört med PRIMARY KEY
En primärnyckel är i princip UNIQUE + NOT NULL + en angiven identitet. En tabell kan ha EN primärnyckel men många UNIQUE-begränsningar.
NULL i UNIQUE
Standard-SQL behandlar NULL som skilt från alla andra värden, inklusive andra NULL-värden. En UNIQUE-kolumn kan innehålla flera rader med NULL:
CREATE TABLE invites (email VARCHAR(255) UNIQUE);
INSERT INTO invites VALUES (NULL), (NULL); -- both succeed
-- PostgreSQL 15+ offers UNIQUE NULLS NOT DISTINCT to treat NULL as equal:
CREATE TABLE invites2 (email VARCHAR(255) UNIQUE NULLS NOT DISTINCT);Sammansatt primärnyckel
Om en naturlig sammansatt nyckel passar kan den användas som PRIMARY KEY:
CREATE TABLE order_items (
order_id BIGINT NOT NULL REFERENCES orders(id) ON DELETE CASCADE,
product_id BIGINT NOT NULL REFERENCES products(id),
quantity INT NOT NULL CHECK (quantity > 0),
PRIMARY KEY (order_id, product_id)
);Surrogatnyckel + UNIQUE naturlig nyckel
Ett vanligt mönster: ett syntetiskt id som primärnyckel och unikhet i den verkliga världen via UNIQUE:
CREATE TABLE products (
id BIGSERIAL PRIMARY KEY,
sku VARCHAR(50) NOT NULL UNIQUE,
name TEXT NOT NULL
);Partiella UNIQUE-index
Unikhet endast bland vissa rader:
-- One active email per user (deleted users can re-register):
CREATE UNIQUE INDEX users_active_email_idx
ON users (email)
WHERE deleted_at IS NULL;UNIQUE-index på uttryck
Unikhet baserad på ett beräknat uttryck – användbart för skiftlägesokänsliga e-postadresser:
CREATE UNIQUE INDEX users_email_ci_idx ON users (LOWER(email));Fel vid UNIQUE-överträdelse
En infogning av en dubblett returnerar:
ERROR: duplicate key value violates unique constraint "users_email_key"
DETAIL: Key (email)=(alice@example.com) already exists.UPSERT bygger på UNIQUE
ON CONFLICT behöver en UNIQUE- eller PRIMARY KEY-begränsning som mål – det är så PostgreSQL vet vad som räknas som en dubblett.
Sammanfattning
UNIQUE är den näst viktigaste begränsningen efter NOT NULL.
- Enkel eller sammansatt
- Partiell UNIQUE för "endast bland aktiva rader"
- UNIQUE på uttryck för skiftlägesokänsliga nycklar
- Var uppmärksam på regeln att NULL är skilt
Snabbkontroll
Kan en UNIQUE-kolumn innehålla flera NULL-värden i standard-SQL?
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 ”UNIQUE-begränsningar och sammansatta nycklar” gratis?
Ja – hela texten till ”UNIQUE-begränsningar och sammansatta nycklar” 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 ”UNIQUE-begränsningar och sammansatta nycklar”?
Säkerställ unikhet för en eller flera kolumner, förstå NULL i unika index och använd sammansatt unikhet för naturliga nycklar. 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 2 av 4.
Hur lång tid tar lektionen ”UNIQUE-begränsningar och sammansatta nycklar”?
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