Terminale · Bases de données et SQL

SQL : insérer, modifier et supprimer des données

Une requête de lecture montre un résultat. Une requête de modification transforme les faits enregistrés. Avant de l’exécuter, il faut donc savoir quelles lignes sont visées, quelle information change et quelles contraintes doivent rester respectées.

SofienAvec SofienIngénieur et enseignant en informatique
Dans ce chapitre

Un cap pour ce chapitre

Ce que vous saurez faire

  • Écrire INSERT, UPDATE et DELETE.
  • Prévoir les lignes affectées par une condition.
  • Vérifier les contraintes et distinguer modification du contenu et du schéma.
Les bases utiles pour commencer

Ajouter une ligne avec INSERT

Nous utilisons Membre(id_membre, prenom, id_club), avec id_membre comme clé primaire et id_club référençant un club existant. INSERT ajoute une nouvelle ligne. Écrire explicitement les colonnes permet de rendre clair l’ordre des valeurs et de limiter la dépendance à l’ordre du schéma.

INSERT INTO Membre (id_membre, prenom, id_club)
VALUES (109, 'Camille', 2);

La ligne doit respecter les domaines, l’unicité de la clé et la référence. Une insertion réutilisant un identifiant déjà présent n’est pas une mise à jour implicite dans cette syntaxe. Elle doit être refusée par la contrainte de clé primaire.

L’ordre des colonnes explicites détermine celui des valeurs. On pourrait écrire prénom avant identifiant à condition de donner les valeurs dans le même ordre. Le nombre 109 ne devient pas automatiquement une clé parce qu’il est placé en premier dans un exemple : c’est le schéma qui définit cette fonction. L’écriture explicite évite de dépendre d’un ordre implicite de colonnes.

Modifier les lignes qui correspondent

UPDATE choisit une relation, SET précise les nouvelles valeurs et WHERE limite les lignes visées. Pour corriger le prénom du membre 103, on utilise son identifiant unique. Une condition fondée sur un prénom peut toucher plusieurs personnes si ce prénom est partagé.

UPDATE Membre
SET prenom = 'Sarah'
WHERE id_membre = 103;

Sans WHERE, la mise à jour concerne toutes les lignes de la relation. Ce comportement peut être voulu pour une opération globale, mais il ne faut pas l’obtenir par oubli. Une consultation avec le même filtre permet de vérifier les lignes ciblées avant une modification réelle.

Une mise à jour par prénom peut légitimement viser plusieurs lignes. Sur nos données, WHERE prenom='Lina' sélectionne 101 et 104. Si l’objectif est de corriger une personne précise, son identifiant unique est la bonne cible. Avant d’écrire SET, décrivez donc exactement l’ensemble visé et vérifiez que la condition exprime cette intention.

Retirer des lignes avec DELETE

DELETE FROM Membre WHERE id_membre = 103 retire la ligne du membre concerné. DELETE FROM Membre sans filtre retire toutes les lignes. Dans les deux cas, la relation et son schéma existent toujours : supprimer des lignes n’est pas supprimer la définition de la table.

Une suppression peut être refusée si d’autres relations référencent les lignes et si la politique définie l’interdit. Il faut lire les contraintes plutôt que supposer une propagation automatique. Le laboratoire utilise des données isolées et fictives ; ses opérations ne touchent ni une base distante, ni les informations du site.

Prévoir et contrôler le résultat

Avant une opération, identifiez les lignes sélectionnées par le filtre, puis appliquez mentalement le changement. Après l’opération, vérifiez le nombre de lignes affectées et les contraintes attendues. Zéro ligne affectée peut signaler un identifiant absent, sans être une erreur de syntaxe.

Le modèle interactif repart toujours du même état initial : Lina 101 au club 1, Noé 102 au club 2, Sara 103 au club 1, Lina 104 au club 3 et Adam 105 au club 2. Changer un contrôle prévisualise une nouvelle opération indépendante. Cette règle évite de confondre une comparaison de scénarios avec une suite de modifications persistantes.

Exemple suivi : prévoir une mise à jour ciblée

Sur l’état initial, UPDATE Membre SET prenom='Sarah' WHERE id_membre=103; modifie Sara seulement. La relation garde cinq lignes, le membre 103 reste au club 1 et sa clé ne change pas. Une consultation préalable SELECT * FROM Membre WHERE id_membre=103; montre la ligne visée.

Avec WHERE prenom='Lina', deux lignes seraient ciblées. Sans WHERE, toutes les cinq le seraient. Le nombre de lignes après UPDATE reste cinq dans chacun de ces cas : il ne suffit donc pas à vérifier la portée du changement. Il faut distinguer nombre de lignes présentes et nombre de lignes affectées. Un filtre sur 110, identifiant absent, affecte zéro ligne tout en restant syntaxiquement valide.

Chaînes, contraintes et suites d’opérations

Une apostrophe appartenant à une valeur textuelle doit être représentée correctement dans une chaîne SQL. Pour le prénom fictif D’Angelo écrit avec une apostrophe simple, le littéral SQL s’écrit 'D''Angelo'. Le formulaire de l’atelier effectue ce doublement dans la requête affichée. Cela conserve le contenu de la valeur au lieu de fermer prématurément son littéral.

Dans une vraie suite, l’ordre des opérations peut changer les résultats. Insérer 109 puis le supprimer remet le contenu initial, alors que supprimer d’abord 109 absent n’affecte rien puis l’insérer laisse six membres. L’atelier compare des opérations indépendantes depuis l’état initial ; changer deux fois ses contrôles n’exécute pas une telle suite persistante. Pour un exercice de séquence, tracez explicitement chaque état et appliquez les contraintes à l’état obtenu juste avant l’opération suivante.

À vous de faire varier les choses

Prévisualisez les lignes affectées

Choisissez une opération, un identifiant et le filtre. Chaque essai repart des cinq membres initiaux ; aucune donnée réelle n’est modifiée.

Lire le résultat de l’expérience initiale

1 ligne(s) affectée(s).

Le formulaire simule ces seules opérations et contraintes sur une base fictive. Le nombre affecté compte les lignes visées, même si leur prénom était déjà identique.

Étatid_membreprenomid_club
Avant101Lina1
Avant102Noé2
Avant103Sara1
Avant104Lina3
Avant105Adam2
Après101Lina1
Après102Noé2
Après103Camille1
Après104Lina3
Après105Adam2

Prévoir le filtre et les contraintes permet de comprendre les effets d’une requête avant sa réalisation.

De la compréhension à l’autonomie

À vous de résoudre

Cherchez d’abord par vous-même. Vérifiez les résultats demandés, utilisez les indices si nécessaire, puis comparez votre méthode à la correction.

Exercice 1 · Appliquer#

Une nouvelle inscription

Écrivez l’insertion du membre 109, Camille, au club 2. Quelles deux vérifications liées aux identifiants faut-il effectuer ?

Indice 1

Annoncez les colonnes dans INSERT.

Indice 2

Une clé doit être nouvelle, l’autre doit référencer une destination existante.

Comprendre la correction

On écrit INSERT INTO Membre (id_membre, prenom, id_club) VALUES (109, 'Camille', 2);. Il faut vérifier que 109 n’existe pas comme clé primaire et que le club 2 existe. Les domaines et la présence du prénom restent également à respecter.

Exercice 2 · Comprendre#

Une modification trop large

Combien de lignes touche UPDATE Membre SET prenom = 'Camille'; sur l’état initial de cinq membres ? Que manque-t-il pour viser seulement 103 ?

Indice 1

Aucune condition n’est présente.

Indice 2

Le membre possède une clé primaire.

Comprendre la correction

Les cinq lignes sont visées. Il faut ajouter WHERE id_membre = 103 pour modifier uniquement la ligne de Sara. La clause SET décrit ce qui change ; elle ne sélectionne pas à elle seule la personne concernée.

Exercice 3 · Corriger#

Effacer le contenu n’efface pas la structure

Après DELETE FROM Membre;, un élève affirme que les attributs de Membre ont disparu. Corrigez son explication.

Indice 1

DELETE retire des lignes.

Indice 2

Le schéma peut exister avec zéro ligne.

Comprendre la correction

La relation est vide mais conserve ses attributs et ses contraintes. On peut y insérer ensuite une nouvelle ligne conforme au même schéma. Une opération supprimant la table elle-même serait différente et ne doit pas être confondue avec DELETE.

Exercice 4 · Justifier#

Un identifiant absent

Sur l’état initial, UPDATE Membre SET prenom = 'Camille' WHERE id_membre = 110; ne change rien. Est-ce forcément une requête mal écrite ?

Indice 1

Les identifiants présents vont de 101 à 105.

Indice 2

Une condition correcte peut ne correspondre à aucune ligne.

Comprendre la correction

Non. La syntaxe et la condition peuvent être valides, mais aucune ligne ne porte 110. Le résultat attendu est donc zéro ligne affectée. Il faut distinguer une erreur de requête d’une recherche qui ne trouve aucune cible dans le contenu courant.

Exercice 5 · Approfondir et transférer#

Un prénom partagé comme filtre

Sur l’état initial, on exécute UPDATE Membre SET prenom='Camille' WHERE prenom='Lina';. Donnez les identifiants touchés, le nombre de lignes affectées et la taille finale. Quelle condition aurait visé uniquement la Lina du club 3 ?

Indice 1

Les deux Lina restent deux personnes distinctes.

Indice 2

Le membre du club 3 porte l’identifiant 104.

Comprendre la correction

Les identifiants touchés sont 101 et 104, donc deux lignes affectées, avec toujours cinq lignes dans la relation. Pour ne cibler que la seconde, utilisez WHERE id_membre=104. La nouvelle valeur définie par SET ne sélectionne pas elle-même une personne.

Exercice 6 · Approfondir et transférer#

Une séquence doit suivre ses états

Depuis cinq membres, on insère (109,Camille,2), on renomme 109 en Cam, puis on supprime 102. Donnez la taille après chaque opération et la ligne finale de 109. Comparez à une nouvelle tentative d’insertion du même identifiant 109.

Indice 1

INSERT ajoute, UPDATE conserve la taille, DELETE retire.

Indice 2

La deuxième insertion rencontre une clé déjà présente.

Comprendre la correction

Les tailles sont 6,6,5. La ligne 109 devient (109,Cam,2). Une nouvelle insertion de 109 est refusée par l’unicité, même si son prénom diffère. Une modification de cette personne demanderait UPDATE, conformément à l’intention.

Exercice 7 · Approfondir et transférer#

Vide ne veut pas dire supprimé

On exécute DELETE FROM Membre;, puis une insertion conforme de (109,Camille,2), en supposant le club 2 existant et aucune autre référence bloquante. Donnez les tailles successives et expliquez pourquoi la deuxième opération peut fonctionner sans recréer le schéma.

Indice 1

DELETE retire les tuples, pas les attributs.

Indice 2

Les contraintes du schéma restent appliquées à l’insertion.

Comprendre la correction

La taille passe à zéro puis à un. La relation vide conserve ses colonnes et sa clé primaire ; l’insertion fournit un nouveau tuple conforme. Le club 2 doit toujours exister, car le fait d’avoir vidé Membre n’annule pas la clé étrangère.

Les erreurs qui méritent un détour

Oublier WHERE pour une modification individuelle.
La clause SET ne choisit pas les lignes. Prévisualisez le même filtre avec une consultation avant toute modification réelle.
Croire que changer le contenu modifie automatiquement le schéma.
INSERT, UPDATE et DELETE travaillent ici sur les lignes d’une relation déjà définie.

La fiche à garder

L’essentiel à retenir

  • INSERT ajoute, UPDATE modifie et DELETE retire des lignes.
  • WHERE détermine les cibles des modifications et suppressions.
  • Les contraintes restent applicables après chaque opération.

Cette notion au bac

Retrouvez ces idées dans un sujet complet, avec des indices, une correction expliquée et des ateliers.

Le prochain pas

Retrouver le catalogue de Terminale

Ce chapitre s’appuie sur le programme officiel de Terminale (PDF, nouvel onglet). Les explications et exercices sont proposés pour l’apprentissage.