Une ligne encodée par erreur doit disparaître. Avant de supprimer, tu sauvegardes la base dans un fichier SQL ; puis tu supprimes avec DELETE, en vérifiant d'abord par un SELECT.
Une ligne de test oubliée, un doublon encodé par erreur : parfois, une ligne doit disparaître. Une base de données n'a pas de corbeille. Une suppression enregistrée est définitive. Avant de supprimer quoi que ce soit, tu vas donc apprendre à sauvegarder ta base.
💡 Base de départ
Télécharge
mon-ecole-relier.dbdans la barre latérale et ouvre-la avec DB Browser for SQLite. Elle contient deux tables :eleve(12 élèves) etprofesseur(6 professeurs, dont Paul Renard, qui n'est plus actif). Le SQL s'écrit dans l'onglet Exécuter le SQL.
À la fin de cet article, tu seras capable de :
.sql, et la restaurer.DELETE FROM … WHERE.SELECT les lignes qui vont disparaître, avant de supprimer.DELETE, qui vide des lignes, de DROP TABLE, qui supprime la table.id manquent après une suppression.Une base SQLite est un simple fichier. Le copier dans un autre dossier est déjà une sauvegarde. Mais il existe une autre forme de sauvegarde, plus lisible et plus pratique à transmettre : le fichier SQL.
📖 Nouvelle notion : la sauvegarde
Une sauvegarde est une copie de la base, rangée à part, qui permet de retrouver les données si une manipulation tourne mal. On la fait avant une opération risquée, pas après. Une sauvegarde qu'on n'a jamais essayé de restaurer n'est pas une garantie.
En anglais : 🇬🇧 backup.
Ctrl+S), pour que la sauvegarde contienne l'état enregistré de la base.sauvegarde-mon-ecole.sql.📖 Nouvelle notion : l'export SQL
Exporter une base en SQL, c'est la transformer en un script : un fichier texte qui contient les
CREATE TABLEde toutes les tables, puis unINSERTpar ligne. En exécutant ce script dans une base vide, on reconstruit la base à l'identique. On appelle aussi ce fichier un dump, un « vidage » de la base.En anglais : 🇬🇧 export ou 🇬🇧 dump.
Ouvre sauvegarde-mon-ecole.sql avec le Bloc-notes. Voici la partie qui concerne les professeurs. La présentation exacte (guillemets, espaces, options) peut varier légèrement selon la version de DB Browser :
BEGIN TRANSACTION;
CREATE TABLE professeur (
id INTEGER PRIMARY KEY,
nom TEXT NOT NULL,
prenom TEXT NOT NULL,
email TEXT NOT NULL UNIQUE,
actif INTEGER NOT NULL DEFAULT 1,
telephone TEXT
);
INSERT INTO "professeur" VALUES(1,'Dubois','Sophie','s.dubois@ecole.be',1,'0471 23 45 67');
INSERT INTO "professeur" VALUES(2,'Lambrechts','Ludovic','l.lambrechts@ecole.be',1,'0485 11 22 33');
INSERT INTO "professeur" VALUES(3,'Vermeulen','Marc','m.vermeulen@ecole.be',1,NULL);
INSERT INTO "professeur" VALUES(4,'Leroy','Anne','a.leroy@ecole.be',1,NULL);
INSERT INTO "professeur" VALUES(5,'Martin','Julie','j.martin@ecole.be',1,NULL);
INSERT INTO "professeur" VALUES(6,'Renard','Paul','p.renard@ecole.be',0,NULL);
COMMIT;
Tu reconnais le CREATE TABLE de la table, puis un INSERT par professeur, avec toutes ses valeurs dans l'ordre des colonnes. La table eleve est construite de la même façon, juste au-dessus. BEGIN TRANSACTION et COMMIT encadrent le tout : si une instruction échoue pendant la restauration, rien n'est à moitié importé.
🧠 Le fichier
.dbcontient la base ; le fichier.sqlcontient les instructions pour la reconstruire. Le second est du texte : on peut le lire, l'envoyer par mail, le ranger avec un projet, ou le rendre comme travail.
Une sauvegarde ne vaut que si elle se restaure. Essaie tout de suite, dans une base neuve, pour ne pas toucher à la tienne :
restauration.db. Si DB Browser ouvre une fenêtre pour créer une table, ferme-la sans rien créer.sauvegarde-mon-ecole.sql. Si DB Browser te propose de créer une nouvelle base pour accueillir les données, garde plutôt restauration.db, qui est vide.eleve contient 12 élèves et professeur 6 professeurs.mon-ecole-relier.db pour la suite.Pour s'exercer sans rien abîmer, on ajoute un faux professeur. INSERT INTO professeur (colonnes) VALUES (valeurs) ajoute une ligne en rangeant chaque valeur dans la colonne de même position. On ne donne ni id ni actif : SQLite attribue le numéro suivant et la valeur par défaut 1.
INSERT INTO professeur (nom, prenom, email)
VALUES ('Test', 'Essai', 'test@ecole.be');
SELECT * FROM professeur;
id | nom | prenom | email | actif | telephone
---+------------+---------+-----------------------+-------+--------------
1 | Dubois | Sophie | s.dubois@ecole.be | 1 | 0471 23 45 67
2 | Lambrechts | Ludovic | l.lambrechts@ecole.be | 1 | 0485 11 22 33
3 | Vermeulen | Marc | m.vermeulen@ecole.be | 1 | NULL
4 | Leroy | Anne | a.leroy@ecole.be | 1 | NULL
5 | Martin | Julie | j.martin@ecole.be | 1 | NULL
6 | Renard | Paul | p.renard@ecole.be | 0 | NULL
7 | Test | Essai | test@ecole.be | 1 | NULL
Le faux professeur porte le numéro 7.
On écrit la condition dans un SELECT. WHERE veut dire où : on garde les lignes où la condition est vraie.
SELECT *
FROM professeur
WHERE id = 7;
id | nom | prenom | email | actif | telephone
---+------+--------+---------------+-------+----------
7 | Test | Essai | test@ecole.be | 1 | NULL
Une ligne, et c'est bien la ligne de test.
On garde le FROM et le WHERE, et on remplace SELECT * par DELETE :
DELETE FROM professeur
WHERE id = 7;
DELETE FROM veut dire supprime de : « supprime de la table professeur les lignes où id vaut 7 ».
📖 Nouvelle notion : DELETE
L'instruction
DELETE FROM table WHERE conditionsupprime toutes les lignes où la condition est vraie. Elle supprime des lignes entières : on ne cite aucune colonne. La table, elle, reste en place.En anglais : 🇬🇧 delete, supprimer.
DB Browser annonce une ligne affectée. Vérifie :
SELECT * FROM professeur;
id | nom | prenom | email | actif | telephone
---+------------+---------+-----------------------+-------+--------------
1 | Dubois | Sophie | s.dubois@ecole.be | 1 | 0471 23 45 67
2 | Lambrechts | Ludovic | l.lambrechts@ecole.be | 1 | 0485 11 22 33
3 | Vermeulen | Marc | m.vermeulen@ecole.be | 1 | NULL
4 | Leroy | Anne | a.leroy@ecole.be | 1 | NULL
5 | Martin | Julie | j.martin@ecole.be | 1 | NULL
6 | Renard | Paul | p.renard@ecole.be | 0 | NULL
Clique sur Écrire les modifications : la ligne de test a disparu du fichier.
💡 Vider une seule case, ce n'est pas un
DELETE. Pour effacer le téléphone d'un professeur sans supprimer le professeur, on modifie la ligne :UPDATE professeur SET telephone = NULL WHERE id = ….
⚠️ Il n'y a pas de corbeille. Une fois les modifications écrites, la ligne supprimée n'existe plus nulle part, sauf dans ta sauvegarde.
DB Browser garde tes changements en attente jusqu'à ce que tu cliques sur Écrire les modifications. Tant que ce n'est pas fait, Annuler les modifications revient au dernier enregistrement. Tu viens d'enregistrer : l'expérience est sans danger.
Exécute :
DELETE FROM professeur;
Aucune erreur, aucune confirmation. DB Browser annonce six lignes affectées.
SELECT * FROM professeur;
id | nom | prenom | email | actif | telephone
---+-----+--------+-------+-------+----------
Tous les professeurs ont disparu. La table existe toujours, avec ses six colonnes, mais elle est vide.
Clique sur Annuler les modifications, puis relance le SELECT : les six professeurs sont revenus.
🧠 Un
DELETEsansWHEREvide toute la table. Avant chaqueDELETE, écris leSELECTavec la même condition, compte les lignes, et compare avec le nombre annoncé par DB Browser après l'exécution. S'il ne correspond pas, annule avant d'écrire.
Après le DELETE FROM professeur, la table était vide mais présente. Essaie maintenant de la supprimer elle-même. DROP TABLE veut dire laisse tomber la table :
DROP TABLE professeur;
SELECT * FROM professeur;
no such table: professeur
Cette fois, la table n'existe plus du tout : ni lignes, ni colonnes, ni contraintes. Clique sur Annuler les modifications pour la retrouver.
| Instruction | Famille | Ce qui disparaît | Ce qui reste |
|---|---|---|---|
DELETE FROM professeur WHERE id = 7 |
DML | les lignes où la condition est vraie | la table et les autres lignes |
DELETE FROM professeur |
DML | toutes les lignes | la table vide, avec ses colonnes |
DROP TABLE professeur |
DDL | la table entière, avec ses lignes | rien |
ℹ️ Le DML regroupe les instructions qui travaillent sur les lignes (
SELECT,INSERT,UPDATE,DELETE). Le DDL regroupe celles qui travaillent sur la structure (CREATE TABLE,ALTER TABLE,DROP TABLE).
La ligne de test portait le numéro 7. Que se passe-t-il pour les numéros quand on supprime au milieu ? Fais l'expérience. Ajoute deux lignes de test :
INSERT INTO professeur (nom, prenom, email)
VALUES
('Test', 'Un', 'test1@ecole.be'),
('Test', 'Deux', 'test2@ecole.be');
Supprime la première, puis ajoute une troisième ligne :
DELETE FROM professeur WHERE id = 7;
INSERT INTO professeur (nom, prenom, email)
VALUES ('Test', 'Trois', 'test3@ecole.be');
SELECT id, nom, prenom FROM professeur;
id | nom | prenom
---+------------+--------
1 | Dubois | Sophie
2 | Lambrechts | Ludovic
3 | Vermeulen | Marc
4 | Leroy | Anne
5 | Martin | Julie
6 | Renard | Paul
8 | Test | Deux
9 | Test | Trois
Le numéro 7 manque, et la nouvelle ligne n'est pas venue le reboucher : SQLite prend le plus grand numéro existant et ajoute 1.
🧠 Les trous dans les
idsont normaux. Un identifiant sert à désigner une ligne, pas à compter les lignes. Ne cherche jamais à « renuméroter proprement » : si un numéro change, tout ce qui faisait référence à cette ligne désignerait soudain une autre ligne.
ℹ️ Si tu supprimes la dernière ligne de la table, son numéro peut être redonné à la ligne suivante, puisque SQLite part du plus grand numéro qui reste.
Clique sur Annuler les modifications : la table retrouve ses six professeurs, numérotés de 1 à 6.
Après chaque essai qui modifie des données, clique sur Annuler les modifications. Garde ta sauvegarde sauvegarde-mon-ecole.sql à portée de main.
Pour chaque instruction, pars de la base de l'article. Annonce avant d'exécuter combien de lignes vont disparaître, écris le SELECT qui le prouve, exécute, compare avec DB Browser, puis annule.
-- a)
DELETE FROM eleve WHERE commune = 'Perwez';
-- b)
DELETE FROM eleve WHERE absences = 0;
-- c)
DELETE FROM eleve WHERE id = 99;
-- d)
DELETE FROM professeur WHERE actif = 0;
-- e)
DELETE FROM eleve;
L'objectif de chaque instruction est de supprimer l'élève Noah Charlier (id 3). Exécute-la, recopie le message, trouve l'erreur et écris la version correcte. N'oublie pas d'annuler après la version correcte.
-- a)
DELETE * FROM eleve WHERE id = 3;
-- b)
DELETE eleve WHERE id = 3;
-- c)
DELETE FROM eleve WHERE nom = Charlier;
-- d)
DROP TABLE eleve WHERE id = 3;
Pour chaque situation, choisis l'instruction adaptée et écris-la complètement.
id 11) a quitté l'école en cours d'année, et on ne veut plus garder sa ligne.id 2) ne veut plus que son adresse e-mail figure dans la base, mais elle reste élève.import_eleve, qui a servi à un import, n'est plus utile.essai doit être vidée pour recommencer un test, mais sa structure doit rester.sauvegarde-exercice.sql.DELETE FROM eleve;, puis clique sur Écrire les modifications. Tes élèves ont disparu pour de bon.Paul Renard a quitté l'école. Dans la base, on a mis actif = 0 au lieu de supprimer sa ligne.
DELETE FROM professeur WHERE id = 6; ?CREATE TABLE et les INSERT.DELETE FROM table WHERE condition supprime des lignes entières ; le SELECT d'abord, avec la même condition.WHERE, toutes les lignes disparaissent, sans confirmation.DELETE vide des lignes, la table reste ; DROP TABLE supprime la table elle-même.id sont normaux : on ne renumérote jamais.Tu sais maintenant créer une table et y ajouter, modifier ou supprimer des lignes. Révise l'essentiel avec la Fiche à étudier — Définir et modifier ses données, puis passe au niveau suivant : Relier deux entités (1-N).