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.
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.
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.
La table produits avant toute modification.
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.
Pour un grand catalogue, on ne tape pas 500 INSERT : on importe un fichier.
.sql (des INSERT tout prêts) : SOURCE catalogue.sql; dans le client mysql, ou Server > Data Import dans Workbench ;.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);
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';
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.
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.
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
Le résultat de chaque requête s'affichera ici.
Consignes 0 / 4
Ajoutez en une seule instruction les villes Meknès (Fès-Meknès) et Essaouira (Marrakech-Safi).
INSERT INTO villes (nom, region) VALUES ('Meknès', 'Fès-Meknès'), ('Essaouira', 'Marrakech-Safi');
Les soldes : baissez de 20 % le prix de tous les textiles (categorie_id = 3), arrondi à 2 décimales.
UPDATE produits SET prix = ROUND(prix * 0.8, 2) WHERE categorie_id = 3;
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.
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