FOREIGN KEY et actions référentielles
Reliez les tables avec FOREIGN KEY et choisissez ON DELETE CASCADE / SET NULL / RESTRICT pour obtenir le comportement approprié.
FOREIGN KEY et actions référentielles est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 3 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.
Rôle d’une clé étrangère
Une FOREIGN KEY fait refuser par la base de données les lignes qui font référence à des parents inexistants :
CREATE TABLE orders (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT NOT NULL REFERENCES users(id),
total NUMERIC(10,2) NOT NULL
);
-- Inserting an order with user_id=999 fails if no such user exists.Pourquoi utiliser des clés étrangères ?
Les clés étrangères garantissent l’intégrité référentielle :
- Aucune ligne orpheline
- Les bogues de l’application sont détectés au moment de l’insertion
- Les diagrammes ER restent exacts
- Le comportement des cascades automatiques est assuré
Actions référentielles
Que doit-il se passer lorsque la ligne parent est supprimée ou mise à jour ? Cinq options :
NO ACTION— erreur (par défaut, différable)RESTRICT— erreur (non différable)CASCADE— supprime ou met également à jour l’enfantSET NULL— définit la FK de l’enfant à NULLSET DEFAULT— définit la FK de l’enfant à sa valeur par défaut
ON DELETE CASCADE
« Lorsque l’utilisateur est supprimé, supprimez aussi ses commandes » :
CREATE TABLE orders (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT NOT NULL
REFERENCES users(id) ON DELETE CASCADE,
total NUMERIC(10,2) NOT NULL
);ON DELETE SET NULL
« Lorsque le responsable est supprimé, les employés restent présents, mais perdent leur responsable » :
CREATE TABLE employees (
id BIGSERIAL PRIMARY KEY,
full_name TEXT NOT NULL,
manager_id BIGINT REFERENCES employees(id) ON DELETE SET NULL
);Par défaut : similaire à RESTRICT
Sans action référentielle, toute tentative de supprimer un parent qui possède des enfants échoue :
ERROR: update or delete on table "users" violates foreign key constraint "orders_user_id_fkey" on table "orders"
DETAIL: Key (id)=(42) is still referenced from table "orders".Indexez toujours la colonne FK
PostgreSQL ne crée PAS automatiquement d’index du côté enfant. Ajoutez-en un : sans cela, la suppression d’un parent déclenche un parcours complet de chaque table enfant :
CREATE INDEX orders_user_id_idx ON orders(user_id);Clés étrangères composites
Faites référence à une clé primaire composite :
CREATE TABLE order_items (
order_id BIGINT,
line_no INT,
PRIMARY KEY (order_id, line_no)
);
CREATE TABLE shipments (
order_id BIGINT,
line_no INT,
FOREIGN KEY (order_id, line_no)
REFERENCES order_items(order_id, line_no)
);Différer les vérifications des clés étrangères
Vous devez parfois insérer deux lignes interdépendantes. Déclarez la FK comme DEFERRABLE INITIALLY DEFERRED :
ALTER TABLE orders
ALTER CONSTRAINT orders_user_id_fkey DEFERRABLE INITIALLY DEFERRED;
BEGIN;
INSERT INTO orders ... ; -- FK temporarily not checked
INSERT INTO users ... ;
COMMIT; -- checked hereAjouter des clés étrangères en ligne
Sur les grandes tables, utilisez NOT VALID + VALIDATE pour éviter un verrouillage prolongé :
ALTER TABLE orders
ADD CONSTRAINT orders_user_id_fkey
FOREIGN KEY (user_id) REFERENCES users(id) NOT VALID;
ALTER TABLE orders VALIDATE CONSTRAINT orders_user_id_fkey;Utilisez les cascades avec prudence
Les suppressions en CASCADE se propagent. Supprimer un utilisateur peut effacer des commandes, des paiements et des journaux d’audit. Assurez-vous que la cascade correspond bien à votre intention métier.
Récapitulatif
Les clés étrangères sont des garde-fous.
- REFERENCES + une action déclarent le lien et son comportement
- Indexez la colonne FK du côté enfant
- Utilisez NOT VALID + VALIDATE pour les ajouts en ligne
Vérification rapide
Quelle action référentielle permet de supprimer AUTOMATICALLY une commande lorsque son utilisateur parent est supprimé ?
Apprends SQL avec un tuteur IA — gratuit
Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.
- Cours
- 46
- Leçons
- 183
Questions Fréquemment Posées
La leçon « FOREIGN KEY et actions référentielles » est-elle gratuite ?
Oui — le texte complet de « FOREIGN KEY et actions référentielles » 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 « FOREIGN KEY et actions référentielles » ?
Reliez les tables avec FOREIGN KEY et choisissez ON DELETE CASCADE / SET NULL / RESTRICT pour obtenir le comportement approprié. 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 3 sur 4.
Combien de temps prend la leçon « FOREIGN KEY et actions référentielles » ?
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
- Contraintes NOT NULL et CHECK
- Contraintes UNIQUE et clés composites
- FOREIGN KEY et actions référentielles
- Valeurs DEFAULT et colonnes générées