SQL Quest
Se connecter English 0 XP Niv. 1
Intermédiaire

SQL INSERT, UPDATE et DELETE : modifier les données

5 min de lecture · 3 exemples exécutables · mis à jour le 9 octobre 2026

Jusqu'ici, toutes les requêtes lisaient des données sans rien changer. Trois commandes permettent de les modifier : INSERT ajoute des lignes, UPDATE change des valeurs existantes et DELETE supprime des lignes. Elles sont puissantes… et dangereuses : une condition oubliée peut modifier toute une table d'un coup.

Syntaxe

INSERT INTO table (col1, col2) VALUES (valeur1, valeur2);
UPDATE table SET col1 = valeur WHERE condition;
DELETE FROM table WHERE condition;

Comment ça marche

INSERT : ajouter des lignes

Listez les colonnes à remplir, puis les valeurs dans le même ordre. Les colonnes non citées reçoivent leur valeur par défaut, ou NULL. On peut insérer plusieurs lignes d'un coup : VALUES (…), (…), (…).

UPDATE : modifier des lignes

SET indique les nouvelles valeurs, éventuellement calculées à partir des anciennes (prix = prix * 1.1). Le WHERE indique quelles lignes modifier. Sans WHERE, toutes les lignes de la table sont modifiées.

DELETE : supprimer des lignes

Même prudence : sans WHERE, toute la table est vidée. Quand des lignes en référencent d'autres (une ligne de commande pointe vers sa commande), supprimez d'abord les lignes « enfants ».

La bonne habitude

Avant un UPDATE ou un DELETE, exécutez un SELECT avec le même WHERE : vous voyez exactement les lignes qui seront touchées. Dans une vraie application, on regroupe les modifications dans une transaction (BEGIN … COMMIT), qu'on peut annuler avec ROLLBACK en cas d'erreur.

Schéma

produits (avant)
nomcategorieprix
Guide SQLLivres20
PlaidMaison25
BD aventureLivres10
produits (après)
nomcategorieprix
Guide SQLLivres22
PlaidMaison25
BD aventureLivres11
UPDATE produits SET prix = prix * 1.1 WHERE categorie = 'Livres' : seules les lignes du WHERE sont modifiées.

Schéma simplifié pour illustrer le principe. Les exemples ci-dessous utilisent la vraie base d'exercices de SQL Quest (une boutique en ligne fictive : voir le schéma complet).

Exemples avec leurs résultats

1. Ajouter une ligne

On ajoute un fournisseur, puis on affiche la table pour vérifier. (Les exemples de cette page sont exécutés sur une copie de la base.)

INSERT INTO fournisseurs (id, nom, pays)
VALUES (8, 'NordicHome', 'Suède');

SELECT * FROM fournisseurs;
Essayer dans le bac à sable
Résultat
idnompays
1TechNovaFrance
2ElectroPlusAllemagne
3MaisonDecoFrance
4SportZoneEspagne
5BookWorldBelgique
6GreenFoodItalie
7AsiaPartsChine
8NordicHomeSuède

8 lignes au total

2. Modifier des lignes

On augmente de 10 % le prix des livres, puis on vérifie.

UPDATE produits
SET prix = ROUND(prix * 1.1, 2)
WHERE categorie = 'Livres';

SELECT nom, prix FROM produits WHERE categorie = 'Livres';
Essayer dans le bac à sable
Résultat
nomprix
Roman policier8,83
Guide SQL27,78
BD aventure10,98
Livre de cuisine20,54
Manga tome 131,81

5 lignes au total

3. Supprimer des lignes liées

On supprime les commandes annulées et leurs lignes de commande (les lignes « enfants » d'abord), puis on compte ce qu'il reste.

DELETE FROM lignes_commande
WHERE commande_id IN (SELECT id FROM commandes WHERE statut = 'annulée');

DELETE FROM commandes WHERE statut = 'annulée';

SELECT statut, COUNT(*) AS nb FROM commandes GROUP BY statut;
Essayer dans le bac à sable
Résultat
statutnb
en cours109
expédiée93
livrée306

3 lignes au total

Les erreurs fréquentes

UPDATE ou DELETE sans WHERE

C'est l'erreur la plus coûteuse en SQL : toutes les lignes sont modifiées ou supprimées, sans confirmation.

À éviter
UPDATE produits SET stock = 0;
Correct
UPDATE produits SET stock = 0 WHERE id = 3;

Un nombre de valeurs différent du nombre de colonnes

INSERT exige autant de valeurs que de colonnes listées, dans le même ordre.

À éviter
INSERT INTO fournisseurs (id, nom, pays) VALUES (9, 'Test');
Correct
INSERT INTO fournisseurs (id, nom, pays) VALUES (9, 'Test', 'France');

Insérer un identifiant qui existe déjà

Une clé primaire doit être unique : SQLite répond UNIQUE constraint failed. Laissez la base choisir l'id, ou choisissez-en un libre.

À éviter
INSERT INTO fournisseurs (id, nom, pays) VALUES (1, 'Doublon', 'France');
Correct
INSERT INTO fournisseurs (nom, pays) VALUES ('Nouveau', 'France');

Exercices

Essayez d'écrire la requête vous-même avant d'ouvrir la solution.

Défi 1. Mettez le stock à 0 pour les produits dont le fournisseur est basé en Chine, puis affichez ces produits.

Voir une solution
UPDATE produits SET stock = 0 WHERE fournisseur_id IN (SELECT id FROM fournisseurs WHERE pays = 'Chine');
SELECT nom, stock FROM produits WHERE stock = 0;
nomstock
Haltères 5kg0
Corde à sauter0
Manga tome 10

3 lignes au total

Essayer dans le bac à sable

Défi 2. Ajoutez deux clients en une seule requête INSERT, puis comptez les clients.

Voir une solution
INSERT INTO clients (prenom, nom, ville) VALUES ('Nina', 'Petit', 'Lyon'), ('Paul', 'Morel', 'Nice');
SELECT COUNT(*) FROM clients;
COUNT(*)
122

1 ligne au total

Essayer dans le bac à sable
Envie de vous entraîner davantage ?

Les exercices interactifs sont corrigés automatiquement, avec un prof qui explique vos erreurs. Une leçon résumée reste affichée à côté de l'éditeur.

Faire les exercices interactifs

Questions fréquentes

Comment annuler un UPDATE ou un DELETE ?

Seulement s'il a été fait dans une transaction non validée (BEGIN … ROLLBACK). Une fois validée, la modification est définitive : d'où l'intérêt des sauvegardes et du SELECT de vérification préalable.

Quelle différence entre DELETE et DROP TABLE ?

DELETE supprime des lignes mais garde la table. DROP TABLE supprime la table entière, structure comprise.

Peut-on modifier plusieurs colonnes en un seul UPDATE ?

Oui : UPDATE produits SET prix = 19.9, stock = 50 WHERE id = 3.

Comment récupérer l'id d'une ligne qu'on vient d'insérer ?

En SQLite, avec last_insert_rowid() ou la clause RETURNING id (depuis la version 3.35). PostgreSQL propose aussi RETURNING.

À lire ensuite