Bases des bases de données

La clé primaire d'une table des clients Client(IdClient, Nom) est IdClient, et la colonne IdClient d'une table des commandes Commande(IdCommande, IdClient) est définie comme clé étrangère faisant référence à IdClient de la table Client. La table Client ne contient que les lignes dont IdClient vaut 'C1' et 'C2'. Que se passe-t-il si l'on exécute INSERT INTO Commande VALUES ('O9', 'C5') dans cet état ?

  1. ALa ligne n'est pas ajoutée et une erreur se produit, car la contrainte d'intégrité référentielle est violée
  2. BLa ligne est ajoutée, et une ligne dont IdClient vaut 'C5' est aussi ajoutée automatiquement à la table Client
  3. CLa ligne est ajoutée, mais sa valeur IdClient est remplacée par NULL
Afficher la réponse et l'explication

Réponse : A. La ligne n'est pas ajoutée et une erreur se produit, car la contrainte d'intégrité référentielle est violée

Une clé étrangère est une colonne qui fait référence à la clé primaire (ou équivalent) d'une autre table, ici la table Client, et elle impose la contrainte d'intégrité référentielle : seules des valeurs existant dans la table référencée, ou NULL, peuvent être stockées. La table Client ne contient pas de client 'C5' ; le SGBD refuse donc la tentative d'ajouter une commande pour un client inexistant, et une erreur se produit. On évite ainsi des commandes qui n'appartiennent à aucun client connu. Inversement, une tentative de supprimer de la table Client une ligne de client qui a encore des commandes est elle aussi refusée avec le comportement par défaut (NO ACTION). Ajouter ON DELETE CASCADE à la définition de la clé étrangère fait que la suppression d'un client supprime aussi en cascade les commandes de ce client.

S'entraîner sur ce thème Retour au thème

Autres questions sur Bases des bases de données

  1. Les instructions SQL se répartissent en langage de définition de données (DDL), langage de manipulation de données (DML) et langage de contrôle de données (DCL). Laquelle relève du DDL ?
  2. Une table Produit contient 5 lignes (Nom, Prix) : (Stylo, 120), (Cahier, 250), (Gomme, 80), (Classeur, 300), (Règle, 150). Quelle proposition donne, dans l'ordre, les lignes renvoyées par SELECT Nom FROM Produit WHERE Prix >= 150 ORDER BY Prix DESC ?
  3. La colonne Service d'une table Employe contient, de la première ligne à la dernière, Commercial, Développement, Commercial, Administration, Développement, Commercial (6 lignes au total). Combien de lignes renvoie SELECT DISTINCT Service FROM Employe ?
  4. Quel est le résultat de l'exécution en SQL de DELETE FROM Employe sans clause WHERE ?
  5. La colonne Points d'une table Examen contient 4 valeurs : 80, NULL, 70, 90 (NULL signifie que la personne n'a pas passé l'examen). Quel est le résultat de SELECT AVG(Points) FROM Examen ?