UNIQUE-begrænsninger og sammensatte nøgler
Håndhæv entydighed på én eller flere kolonner, forstå NULL i unique-indekser, og brug sammensat entydighed til naturlige nøgler.
UNIQUE-begrænsninger og sammensatte nøgler er en gratis SQL Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i SQL Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. SQL Academy-kurset indeholder 4 lektioner i alt.
UNIQUE: Ingen duplikater tilladt
En UNIQUE-begrænsning forbyder, at to rækker deler den samme værdi i de begrænsede kolonner:
CREATE TABLE users (
id BIGSERIAL PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE,
username VARCHAR(50) UNIQUE
);UNIQUE opretter et indeks
En UNIQUE-begrænsning implementeres med et unikt B-træ-indeks, så opslag på den kolonne er hurtige.
-- This shows the implicit index:
SELECT indexname FROM pg_indexes WHERE tablename = 'users';Sammensat UNIQUE
Entydighed på tværs af en kombination af kolonner:
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 kontra PRIMARY KEY
En primærnøgle er grundlæggende UNIQUE + NOT NULL + en udpeget identitet. En tabel kan have én primærnøgle, men mange UNIQUE-begrænsninger.
NULL i UNIQUE
Standard-SQL behandler NULL som forskellig fra alle andre værdier (herunder andre NULL-værdier). Du kan have flere NULL-rækker i en UNIQUE-kolonne:
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);Sammensat primærnøgle
Hvis en naturlig sammensat nøgle passer, skal du bruge den 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)
);Surrogatnøgle + UNIQUE naturlig nøgle
Et almindeligt mønster: et syntetisk id som primærnøgle og entydighed fra den virkelige verden via UNIQUE:
CREATE TABLE products (
id BIGSERIAL PRIMARY KEY,
sku VARCHAR(50) NOT NULL UNIQUE,
name TEXT NOT NULL
);Delvise UNIQUE-indeks
Entydighed kun blandt nogle rækker:
-- 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-indeks på udtryk
Entydighed baseret på et beregnet udtryk — nyttigt til e-mailadresser uden forskel på store og små bogstaver:
CREATE UNIQUE INDEX users_email_ci_idx ON users (LOWER(email));Fejl ved overtrædelse af UNIQUE
En duplikatindsættelse returnerer:
ERROR: duplicate key value violates unique constraint "users_email_key"
DETAIL: Key (email)=(alice@example.com) already exists.UPSERT bygger på UNIQUE
ON CONFLICT skal bruge en UNIQUE- eller PRIMARY KEY-begrænsning som mål — sådan ved PostgreSQL, hvad der tæller som en duplikat.
Opsummering
UNIQUE er den næstvigtigste begrænsning efter NOT NULL.
- Enkelt eller sammensat
- Delvis UNIQUE til "kun blandt aktive rækker"
- UNIQUE på udtryk til nøgler uden forskel på store og små bogstaver
- Vær opmærksom på reglen om, at NULL er forskellig
Hurtigt tjek
Kan en UNIQUE-kolonne indeholde flere NULL-værdier i standard-SQL?
Lær SQL med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 46
- Lektioner
- 183
Ofte stillede spørgsmål
Er lektionen “UNIQUE-begrænsninger og sammensatte nøgler” gratis?
Ja — hele teksten til “UNIQUE-begrænsninger og sammensatte nøgler” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af SQL Academy-kurset, skal du opgradere til CoddyKit PRO. SQL Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “UNIQUE-begrænsninger og sammensatte nøgler”?
Håndhæv entydighed på én eller flere kolonner, forstå NULL i unique-indekser, og brug sammensat entydighed til naturlige nøgler. Du øver dig i SQL Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på SQL Academy?
Der kræves ingen tidligere erfaring. SQL Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “UNIQUE-begrænsninger og sammensatte nøgler”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne SQL Academy-lektion?
Ja. Alle SQL Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- NOT NULL- og CHECK-begrænsninger
- UNIQUE-begrænsninger og sammensatte nøgler
- FOREIGN KEY og referentielle handlinger
- DEFAULT-værdier og genererede kolonner