SQL Academy · Lektion

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.

Lektion 2 av 413 steg

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?

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

  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