Aller au contenu
M06 · C. Manipuler les données

Insérer, modifier, supprimer : INSERT, UPDATE, DELETE

Ajouter des lignes une par une ou en lot, modifier des valeurs avec UPDATE ... SET ... WHERE, supprimer avec DELETE, et sécuriser le tout avec une transaction.

1Situer

La base de Souk Atlas est créée, mais elle est vide. Il faut y mettre le catalogue, enregistrer les nouveaux clients, changer le statut d'une commande quand elle est livrée, retirer un produit qui n'est plus fabriqué. Ces quatre opérations de base (créer, lire, modifier, supprimer) ont un nom : le CRUD. Cette leçon couvre les trois qui modifient la base.

2Comprendre

INSERT, UPDATE, DELETE sur la table produits
SELECT * FROM produits; idnomprixstock 1Tajine décoré18014 2Plat à couscous2500 5Savon noir30120 13Lanterne2806 ✖ tous les prix valent 0 !

La table produits avant toute modification.

1 / 5

Insérer des lignes : INSERT

INSERT INTO clients (nom, prenom, email, ville_id, date_inscription)
VALUES ('Saidi', 'Ghita', 'ghita.saidi@mail.ma', 2, '2025-06-01');

Les textes et les dates sont entre apostrophes, les nombres sans. Les colonnes non citées reçoivent leur valeur DEFAULT, ou NULL, ou le numéro suivant si elles sont AUTO_INCREMENT.

Importer des données en lot

Pour un grand catalogue, on ne tape pas 500 INSERT : on importe un fichier.

  • un fichier .sql (des INSERT tout prêts) : SOURCE catalogue.sql; dans le client mysql, ou Server > Data Import dans Workbench ;
  • un fichier .csv (exporté d’Excel) : Table Data Import Wizard dans Workbench, ou en SQL :
LOAD DATA INFILE '/chemin/produits.csv'
INTO TABLE produits
FIELDS TERMINATED BY ';' ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES                       -- la ligne des titres
(nom, categorie_id, prix, stock);

Modifier des lignes : UPDATE

UPDATE produits SET prix = 35 WHERE id = 5;
UPDATE produits SET stock = stock - 2 WHERE id = 1;          -- calcul à partir de l'ancienne valeur
UPDATE commandes SET statut = 'livrée' WHERE statut = 'payée' AND date_commande < '2025-04-01';

Supprimer des lignes : DELETE

DELETE FROM produits WHERE id = 7;
DELETE FROM lignes_commande WHERE commande_id = 6;  -- d'abord les « enfants »
DELETE FROM commandes WHERE id = 6;                  -- puis le « parent »

Si une clé étrangère fait référence à la ligne, la suppression est refusée (sauf ON DELETE CASCADE) : c’est l’intégrité référentielle qui protège la base.

Tout ou rien : la transaction

Exemple simple

Le registre du magasin

INSERT, c'est écrire une nouvelle ligne dans le registre. UPDATE, c'est barrer une valeur et écrire la nouvelle. DELETE, c'est rayer la ligne entière.

Exemple simple

Toujours viser avant de tirer

Avant un UPDATE ou un DELETE, on écrit d'abord un SELECT avec le même WHERE : on voit exactement quelles lignes seront touchées.

SELECT * FROM produits WHERE stock = 0;   -- je vérifie
DELETE FROM produits WHERE stock = 0;     -- puis j'agis

3Manipuler

Gérez le catalogue de la boutique : réalisez les consignes une par une, en vérifiant avec un SELECT avant chaque UPDATE ou DELETE.
Pas à pas dans le lab ↗ La base de départ se crée dans votre navigateur (moteur SQL d’environ 700 Ko, chargé une fois).
Résultat

Le résultat de chaque requête s'affichera ici.

Consignes 0 / 4

  1. La lanterne en cuivre est dans le catalogue
  2. Le savon noir coûte 35 DH (et seulement lui a changé)
  3. La commande 8 a le statut « payée »
  4. L'eau de rose n'existe plus

4Pratiquer

Exercice 1 · Insérer plusieurs lignes

Ajoutez en une seule instruction les villes Meknès (Fès-Meknès) et Essaouira (Marrakech-Safi).

Voir le corrigé
INSERT INTO villes (nom, region) VALUES
  ('Meknès', 'Fès-Meknès'),
  ('Essaouira', 'Marrakech-Safi');

Exercice 2 · UPDATE avec calcul

Les soldes : baissez de 20 % le prix de tous les textiles (categorie_id = 3), arrondi à 2 décimales.

Voir le corrigé
UPDATE produits
SET prix = ROUND(prix * 0.8, 2)
WHERE categorie_id = 3;

Exercice 3 · Une transaction

Une cliente commande 2 tajines (produit 1, commande 13 déjà créée). Écrivez une transaction qui ajoute la ligne de commande et diminue le stock, les deux ou rien.

Voir le corrigé
START TRANSACTION;
INSERT INTO lignes_commande (commande_id, produit_id, quantite, prix_unitaire)
VALUES (13, 1, 2, 180);
UPDATE produits SET stock = stock - 2 WHERE id = 1;
COMMIT;
-- en cas de problème : ROLLBACK; annule les deux

5Vérifier

1. Que fait UPDATE produits SET prix = 0; (sans WHERE) ?
2. Dans INSERT INTO villes (nom, region) VALUES ('Taza', 'Fès-Meknès'), pourquoi ne pas donner l'id ?
3. À quoi sert ROLLBACK ?