0Pricing
SQL Academy · Leçon

Contraintes UNIQUE et clés composites

Imposez l’unicité sur une ou plusieurs colonnes, comprenez le traitement des NULL dans les index uniques et utilisez l’unicité composite pour les clés naturelles.

Contraintes UNIQUE et clés composites est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Academy comprend 4 leçons au total.

UNIQUE : aucun doublon autorisé

Une contrainte UNIQUE interdit à deux lignes de partager la même valeur dans les colonnes concernées :

CREATE TABLE users (
  id BIGSERIAL PRIMARY KEY,
  email VARCHAR(255) NOT NULL UNIQUE,
  username VARCHAR(50) UNIQUE
);

UNIQUE crée un index

Une contrainte UNIQUE est implémentée avec un index unique en arbre B, de sorte que les recherches sur cette colonne sont rapides.

-- This shows the implicit index:
SELECT indexname FROM pg_indexes WHERE tablename = 'users';

UNIQUE composite

Unicité sur une combinaison de colonnes :

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 ou PRIMARY KEY

Une clé primaire est essentiellement UNIQUE + NOT NULL + une identité désignée. Une table peut avoir UNE seule clé primaire, mais de nombreuses contraintes UNIQUE.

NULL dans UNIQUE

La norme SQL considère NULL comme distinct de toute autre valeur, y compris des autres NULL. Une colonne UNIQUE peut donc contenir plusieurs lignes 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);

Clé primaire composite

Si une clé composite naturelle convient, utilisez-la comme 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)
);

Clé de substitution + clé naturelle UNIQUE

Modèle courant : un identifiant synthétique comme clé primaire, et l’unicité du monde réel assurée par UNIQUE :

CREATE TABLE products (
  id BIGSERIAL PRIMARY KEY,
  sku VARCHAR(50) NOT NULL UNIQUE,
  name TEXT NOT NULL
);

Index UNIQUE partiels

L’unicité ne s’applique qu’à certaines lignes :

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

Index UNIQUE sur une expression

Unicité fondée sur une expression calculée — utile pour les adresses e-mail insensibles à la casse :

CREATE UNIQUE INDEX users_email_ci_idx ON users (LOWER(email));

Erreurs de violation de UNIQUE

Une insertion en double renvoie :

ERROR:  duplicate key value violates unique constraint "users_email_key"
DETAIL:  Key (email)=(alice@example.com) already exists.

UPSERT s’appuie sur UNIQUE

ON CONFLICT a besoin d’une contrainte UNIQUE ou d’une PRIMARY KEY comme cible — c’est ainsi que PostgreSQL sait ce qui constitue un doublon.

Récapitulatif

UNIQUE est votre deuxième contrainte la plus importante après NOT NULL.

  • Simple ou composite
  • UNIQUE partiel pour « uniquement parmi les lignes actives »
  • UNIQUE sur une expression pour les clés insensibles à la casse
  • Faites attention à la règle selon laquelle NULL est distinct

Vérification rapide

Une colonne UNIQUE peut-elle contenir plusieurs valeurs NULL en SQL standard ?

Questions Fréquemment Posées

La leçon « Contraintes UNIQUE et clés composites » est-elle gratuite ?

Oui — le texte complet de « Contraintes UNIQUE et clés composites » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Academy, passe à CoddyKit PRO. Le cours SQL Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Contraintes UNIQUE et clés composites » ?

Imposez l’unicité sur une ou plusieurs colonnes, comprenez le traitement des NULL dans les index uniques et utilisez l’unicité composite pour les clés naturelles. Tu pratiques SQL Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer SQL Academy ?

Aucune expérience préalable n'est requise. SQL Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Contraintes UNIQUE et clés composites » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon SQL Academy ?

Oui. Chaque leçon SQL Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Contraintes NOT NULL et CHECK
  2. Contraintes UNIQUE et clés composites
  3. FOREIGN KEY et actions référentielles
  4. Valeurs DEFAULT et colonnes générées
← Retour à SQL Academy