CaveSQL SQLPièce 2/7Débutant

Ajouter, modifier et supprimer des lignes

Écrire dans une base avec INSERT, UPDATE et DELETE, et comprendre pourquoi oublier le WHERE peut tout effacer.

Ce que tu vas apprendre

  • Ajouter des lignes avec INSERT.
  • Changer des valeurs existantes avec UPDATE et retirer des lignes avec DELETE.
  • Éviter l'erreur classique : un UPDATE ou un DELETE sans WHERE.

INSERT : ajouter une ligne

INSERT INTO recettes (titre, temps_minutes)
VALUES ('Crêpes', 30);

La première parenthèse liste les colonnes à remplir. La seconde donne les valeurs, dans le même ordre.

Les colonnes que tu ne cites pas reçoivent leur valeur par défaut, ou NULL à défaut. C'est ainsi que id peut se remplir tout seul (voir le cours 03).

Pour ajouter plusieurs lignes d'un coup, sépare-les par des virgules :

INSERT INTO recettes (titre, temps_minutes)
VALUES ('Quiche lorraine', 55),
       ('Soupe à l''oignon', 45);

Pour écrire une apostrophe dans un texte, double-la : 'Soupe à l''oignon'.

Récupérer ce qui vient d'être créé

Après un INSERT, tu veux souvent connaître l'id donné à la nouvelle ligne. Ajoute RETURNING :

INSERT INTO recettes (titre, temps_minutes)
VALUES ('Flan pâtissier', 70)
RETURNING id;

PostgreSQL renvoie les colonnes demandées pour la ligne insérée, comme un SELECT.

UPDATE : modifier des lignes

UPDATE recettes
SET temps_minutes = 50
WHERE id = 4;

SET indique la nouvelle valeur. WHERE choisit les lignes concernées. Ici, seule la recette numéro 4 change.

Tu peux modifier plusieurs colonnes à la fois :

UPDATE recettes
SET titre = 'Tarte aux pommes maison', temps_minutes = 55
WHERE id = 4;

Tu peux aussi calculer à partir de l'ancienne valeur :

UPDATE recettes
SET temps_minutes = temps_minutes + 10
WHERE titre = 'Gratin dauphinois';

DELETE : supprimer des lignes

DELETE FROM recettes
WHERE id = 5;

La ligne numéro 5 disparaît de la table. Il n'y a pas de corbeille : sauf si tu as une sauvegarde, elle est perdue.

Le danger du WHERE oublié

Compare ces deux requêtes :

DELETE FROM recettes WHERE id = 5;
DELETE FROM recettes;

La première supprime une recette. La seconde supprime toutes les recettes. Sans WHERE, la commande s'applique à chaque ligne de la table, et PostgreSQL ne demande aucune confirmation.

C'est pareil pour UPDATE : UPDATE recettes SET temps_minutes = 0; met la durée de toutes les recettes à zéro.

Avant d'écrire un UPDATE ou un DELETE, écris d'abord un SELECT avec le même WHERE. Vérifie qu'il renvoie exactement les lignes visées, puis remplace SELECT * par la commande de modification.

Prendre l'habitude sûre

Voici une méthode en quatre étapes :

  1. Écris SELECT * FROM recettes WHERE id = 5; et regarde le résultat.
  2. Si c'est la bonne ligne, transforme la requête en DELETE FROM recettes WHERE id = 5;.
  3. Relis la requête avant de l'exécuter, et vérifie la présence du WHERE.
  4. Pour les opérations sensibles, utilise une transaction, que tu verras au cours 06.

Éviter les doublons avec ON CONFLICT

Si une colonne a une contrainte d'unicité, insérer deux fois la même valeur provoque une erreur. Pour ignorer l'ajout dans ce cas :

INSERT INTO categories (nom)
VALUES ('Entrées')
ON CONFLICT DO NOTHING;

Si la ligne existe déjà, rien ne se passe et aucune erreur n'apparaît. Les contraintes sont expliquées au cours suivant.

Tout ce que tu exécutes dans l'éditeur SQL d'un vrai projet s'applique à de vraies données. Entraîne-toi d'abord sur une base de test.

À retenir

  • INSERT INTO table (colonnes) VALUES (valeurs) ajoute des lignes ; RETURNING renvoie par exemple l'id créé.
  • UPDATE table SET colonne = valeur WHERE ... modifie des lignes existantes.
  • DELETE FROM table WHERE ... supprime des lignes, sans retour en arrière possible.
  • Sans WHERE, UPDATE et DELETE touchent toute la table.
  • Teste toujours le WHERE avec un SELECT avant de modifier ou de supprimer.

Pour aller plus loin

Sources officielles

Ensuite

Projet
Lignes de code
Niveau
Cave
Appartement
SQL
Pièce
2/7
Plan n°
sql/02.modifier-les-donnees
Lignes de code · fiches rédigées à partir des documentations officielles, sources citées en bas de chaque page.