Sobes.tech
Junior — Middle

Quel comportement de la base de données PostgreSQL est observé si, lors de la suppression d'une entrée liée à une autre table via une clé étrangère, aucune action explicite n'est spécifiée?

sobes.tech IA

Réponse de l'IA

En PostgreSQL, si lors de la suppression d’un enregistrement lié à une autre table via une clé étrangère aucune action explicite n’est spécifiée (par exemple, ON DELETE CASCADE ou ON DELETE SET NULL), le comportement par défaut est ON DELETE NO ACTION.

Cela signifie qu’une tentative de supprimer un enregistrement référencé depuis une autre table entraînera une erreur de contrainte de clé étrangère, et la suppression ne sera pas effectuée.

Ainsi, la base de données empêche la violation de l’intégrité des données en empêchant la suppression d’un enregistrement parent tant que des enregistrements enfants liés existent.

Exemple :

-- Table des commandes avec une clé étrangère vers la table des clients
CREATE TABLE customers (
    id SERIAL PRIMARY KEY
);

CREATE TABLE orders (
    id SERIAL PRIMARY KEY,
    customer_id INT REFERENCES customers(id)
);

-- Tentative de suppression d’un client ayant des commandes, sans ON DELETE CASCADE
DELETE FROM customers WHERE id = 1; -- provoquera une erreur

Pour autoriser la suppression avec suppression automatique des enregistrements liés, il faut spécifier explicitement ON DELETE CASCADE lors de la création de la clé étrangère.