Ajouter, modifier et supprimer des lignes
Ce que tu vas apprendre
- Ajouter des lignes avec
INSERT. - Changer des valeurs existantes avec
UPDATEet retirer des lignes avecDELETE. - Éviter l'erreur classique : un
UPDATEou unDELETEsansWHERE.
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.
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 :
- Écris
SELECT * FROM recettes WHERE id = 5;et regarde le résultat. - Si c'est la bonne ligne, transforme la requête en
DELETE FROM recettes WHERE id = 5;. - Relis la requête avant de l'exécuter, et vérifie la présence du
WHERE. - 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.
À retenir
INSERT INTO table (colonnes) VALUES (valeurs)ajoute des lignes ;RETURNINGrenvoie par exemple l'idcréé.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,UPDATEetDELETEtouchent toute la table. - Teste toujours le
WHEREavec unSELECTavant de modifier ou de supprimer.
Pour aller plus loin
Sources officielles
Ensuite
La base relationnelle et SELECT
Comprendre les tables, les lignes, les colonnes et la clé primaire, puis lire des données avec SELECT, WHERE, ORDER BY et LIMIT.
Créer des tables
Définir ses propres tables avec CREATE TABLE, choisir les types, poser des contraintes et relier les tables par des clés étrangères.
- Projet
- Lignes de code
- Niveau
- Cave
- Appartement
- SQL
- Pièce
- 2/7
- Plan n°
- sql/02.modifier-les-donnees