Clés primaires et unicité
Comprenez les clés primaires, les clés de substitution et les clés naturelles, les clés composites, ainsi que la raison pour laquelle chaque ligne a besoin d’un identifiant unique fiable.
Clés primaires et unicité 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.
Pourquoi chaque ligne a besoin d'un identifiant unique
Pour modifier ou supprimer une ligne précise en toute sécurité, vous devez pouvoir la désigner sans ambiguïté.
- Deux utilisateurs nommés « Alice Adams » peuvent exister
- En revanche, deux utilisateurs avec
id = 42ne doivent PAS exister - L'identifiant unique s'appelle la clé primaire
Déclarer une clé primaire
Vous définissez une colonne comme clé primaire lors de la création de la table :
CREATE TABLE products (
id BIGSERIAL PRIMARY KEY,
sku VARCHAR(50) NOT NULL,
name VARCHAR(200) NOT NULL,
price NUMERIC(10,2) NOT NULL
);Clé primaire = NOT NULL + UNIQUE
Une PRIMARY KEY impose automatiquement :
- NOT NULL — les valeurs de la clé primaire ne peuvent pas être manquantes
- UNIQUE — aucune paire de lignes ne peut partager la même valeur de clé primaire
La base de données crée également un index unique sur la clé primaire, afin que les recherches par identifiant soient rapides.
Clés de substitution ou naturelles
Vous avez deux choix pour la clé primaire :
- Clé de substitution — un identifiant synthétique généré par la base de données (BIGSERIAL, UUID). C'est le choix le plus courant dans les applications modernes.
- Clé naturelle — un identifiant issu du monde réel (adresse e-mail, ISBN). C'est risqué : les utilisateurs changent d'adresse e-mail.
Bonne pratique : utilisez un identifiant de substitution et ajoutez une contrainte UNIQUE sur la clé naturelle.
BIGSERIAL : entiers à incrémentation automatique
Dans PostgreSQL, BIGSERIAL crée une colonne à incrémentation automatique de 64 bits, associée à une séquence.
CREATE TABLE orders (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT NOT NULL,
total NUMERIC(10,2) NOT NULL
);
-- You omit id on insert and the DB fills it in:
INSERT INTO orders (user_id, total) VALUES (7, 99.50);Clés primaires UUID
Une autre possibilité est un UUID de 128 bits, utile lorsque les identifiants doivent être uniques entre plusieurs systèmes ou être générés côté client.
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE TABLE sessions (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
user_id BIGINT NOT NULL,
ip INET
);Clés primaires composites
Parfois, l'identifiant naturel est une combinaison de colonnes :
CREATE TABLE order_items (
order_id BIGINT NOT NULL,
product_id BIGINT NOT NULL,
quantity INT NOT NULL,
PRIMARY KEY (order_id, product_id)
);
-- The pair (order_id, product_id) must be unique
-- A product can appear at most once per orderContraintes UNIQUE et clé primaire
Vous pouvez déclarer d'autres colonnes comme uniques sans en faire la clé primaire :
CREATE TABLE users (
id BIGSERIAL PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE,
username VARCHAR(50) UNIQUE
);
-- INSERT below fails on the second row:
INSERT INTO users (email, username) VALUES ('a@x.com', 'alice');
INSERT INTO users (email, username) VALUES ('a@x.com', 'bob'); -- ERRORQue se passe-t-il lors d'une insertion en double
Si vous essayez d'insérer une clé primaire en double, la base de données rejette l'instruction entière :
ERROR: duplicate key value violates unique constraint "users_pkey" DETAIL: Key (id)=(42) already exists.
C'est une bonne chose : cela empêche la corruption silencieuse des données.
Les recherches par clé primaire sont rapides
L'index unique de la clé primaire permet d'effectuer des recherches en O(log n), même à l'échelle du milliard de lignes.
-- Index Scan using users_pkey on users (cost=0.43..8.45 rows=1)
SELECT email FROM users WHERE id = 42;Ne réutilisez pas les identifiants
Même lorsque vous supprimez une ligne, ne réutilisez PAS sa clé primaire. D'autres tables ou systèmes externes peuvent encore la référencer. Laissez la séquence continuer à augmenter : les identifiants ne coûtent presque rien.
Récapitulatif
Les clés primaires donnent à chaque ligne une référence stable et unique.
- Privilégiez les clés de substitution (BIGSERIAL ou UUID)
- Utilisez UNIQUE pour les clés naturelles qui ne doivent pas être dupliquées
- Les clés primaires composites modélisent la règle « cette paire doit être unique »
Vérification rapide
Quelle contrainte est implicitement imposée par une PRIMARY KEY ?
Questions Fréquemment Posées
La leçon « Clés primaires et unicité » est-elle gratuite ?
Oui — le texte complet de « Clés primaires et unicité » 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 « Clés primaires et unicité » ?
Comprenez les clés primaires, les clés de substitution et les clés naturelles, les clés composites, ainsi que la raison pour laquelle chaque ligne a besoin d’un identifiant unique fiable. 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 « Clés primaires et unicité » ?
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
- Qu’est-ce qu’un RDBMS et pourquoi les tables sont importantes
- Clés primaires et unicité
- NULL : la troisième valeur de vérité
- Vue d’ensemble des types de données : INT VARCHAR DATE BOOLEAN