Fiche à étudier — Définir et modifier ses données

Tout ce qu'il faut savoir par cœur sur CREATE, ALTER, DROP, INSERT, UPDATE et DELETE : vocabulaire, syntaxe, contraintes, bons réflexes et pièges, avec des questions pour te tester.

    4ttr 5ttr 6ttr
  • Synthèse

Cette fiche rassemble ce qu'il faut retenir pour créer une table et écrire dans ses lignes, avec SQLite et DB Browser for SQLite.


Le vocabulaire

Mot Définition En anglais
DDL Les instructions qui définissent la structure de la base : CREATE TABLE, ALTER TABLE, DROP TABLE. Data Definition Language
DML Les instructions qui travaillent sur les lignes : SELECT, INSERT, UPDATE, DELETE. Data Manipulation Language
Schéma La structure d'une base : ses tables, leurs colonnes, leurs types et leurs contraintes, sans aucune donnée. schema
Clé primaire La colonne qui désigne une ligne et une seule : jamais deux fois la même valeur, jamais vide, une seule par table. primary key
NULL L'absence de valeur : ni un texte vide, ni zéro, mais une case que personne n'a remplie. null
Contrainte Une règle écrite dans la structure d'une table, que la base vérifie à chaque ajout ou modification. constraint
NOT NULL La contrainte qui rend une colonne obligatoire. not null
UNIQUE La contrainte qui interdit les doublons dans une colonne. unique
Valeur par défaut La valeur que la base écrit elle-même quand on ajoute une ligne sans remplir la colonne. default value
ALTER TABLE L'instruction qui modifie la structure d'une table existante sans effacer ses lignes. alter
Script SQL Un fichier texte .sql qui contient une suite d'instructions SQL qu'on peut rejouer. SQL script
INSERT L'instruction qui ajoute une ligne dans une table. insert
INSERT … SELECT L'instruction qui ajoute dans une table les lignes renvoyées par un SELECT. insert select
Fichier CSV Un fichier texte qui contient un tableau, avec les valeurs séparées par un caractère fixe (, ou ;). Comma-Separated Values
UPDATE L'instruction qui modifie des lignes existantes. update
Nombre de lignes affectées Le nombre de lignes réellement touchées par un INSERT, un UPDATE ou un DELETE. rows affected
Écrire / Annuler les modifications Dans DB Browser : enregistrer dans le fichier les changements en attente, ou les abandonner. Write Changes / Revert Changes
DELETE L'instruction qui supprime des lignes entières d'une table. delete
Sauvegarde Une copie de la base, rangée à part, faite avant une opération risquée. backup
Export SQL La transformation d'une base en script SQL (CREATE TABLE + INSERT) capable de la reconstruire. export, dump

La syntaxe

Créer une table

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
);

Chaque colonne : nom TYPE contraintes. Une virgule entre les colonnes, jamais après la dernière. Variante sans erreur si la table existe : CREATE TABLE IF NOT EXISTS.

Type Pour quoi
TEXT des mots, des codes, des téléphones, des dates AAAA-MM-JJ
INTEGER des nombres entiers avec lesquels on calcule ou qu'on compare
REAL des nombres à décimales, écrits avec un point : 13.5

Modifier une table

ALTER TABLE professeur ADD COLUMN telephone TEXT;
ALTER TABLE professeur RENAME COLUMN telephone TO gsm;
ALTER TABLE professeur RENAME TO enseignant;

Supprimer une table

DROP TABLE IF EXISTS import_prof;

Ajouter des lignes

INSERT INTO professeur (nom, prenom, email)
VALUES ('Leroy', 'Anne', 'a.leroy@ecole.be');

INSERT INTO professeur (nom, prenom, email)
VALUES
    ('Martin', 'Julie', 'j.martin@ecole.be'),
    ('Renard', 'Paul',  'p.renard@ecole.be');

Copier les lignes d'une table vers une autre

INSERT INTO professeur (nom, prenom, email)
SELECT nom, prenom, email
FROM import_prof;

Modifier des lignes

UPDATE eleve
SET absences = absences + 1
WHERE id = 9;

UPDATE professeur
SET actif = 0,
    telephone = NULL
WHERE id = 6;

Supprimer des lignes

DELETE FROM professeur
WHERE id = 7;

Les contraintes

Contrainte Effet Valeur vide (NULL) acceptée ? Message quand elle refuse
PRIMARY KEY désigne la ligne ; avec INTEGER, se remplit toute seule non UNIQUE constraint failed: table.id
NOT NULL la colonne est obligatoire non NOT NULL constraint failed: table.colonne
UNIQUE pas deux fois la même valeur oui, et même plusieurs fois UNIQUE constraint failed: table.colonne
DEFAULT valeur valeur écrite quand on ne remplit pas la colonne ne refuse rien

Une colonne qu'on ne cite pas dans un INSERT reçoit sa valeur DEFAULT si elle en a une, sinon NULL. Une ligne refusée n'est pas ajoutée, même en partie.


Les bons réflexes

  • Nommer les colonnes dans chaque INSERT.
  • Un SELECT après chaque écriture, pour voir ce que la table contient vraiment.
  • Le SELECT d'abord avant un UPDATE ou un DELETE : même WHERE, on compte les lignes, puis on remplace le début de l'instruction.
  • Viser la clé primaire (WHERE id = …) pour modifier ou supprimer une ligne précise.
  • Annoncer le nombre de lignes avant d'exécuter, et le comparer avec le nombre annoncé par DB Browser.
  • Sauvegarder avant une opération risquée : Fichier > Exporter > Base de données vers fichier SQL…, et vérifier que la sauvegarde se restaure.
  • Écrire les modifications (Ctrl+S) seulement quand le résultat est vérifié ; sinon, Annuler les modifications.
  • Lire le message d'erreur : la contrainte, puis table.colonne en cause.

Les pièges à connaître

  • Une virgule après la dernière colonne d'un CREATE TABLE : near ")": syntax error.
  • Un téléphone en INTEGER perd son zéro du début : un numéro est du TEXT.
  • UNIQUE accepte plusieurs NULL : pour « obligatoire et sans doublon », il faut NOT NULL UNIQUE.
  • DROP TABLE et un script qui commence par DROP TABLE IF EXISTS détruisent toutes les lignes.
  • ALTER TABLE de SQLite ne change ni le type ni les contraintes d'une colonne existante, et refuse d'ajouter une colonne NOT NULL sans DEFAULT à une table qui contient des lignes.
  • Un INSERT sans liste de colonnes dépend de l'ordre des colonnes de la table.
  • Un texte sans apostrophes est pris pour un nom de colonne : no such column: …. Une apostrophe dans un texte se double : 'D''Hondt'.
  • Un UPDATE ou un DELETE sans WHERE touche toutes les lignes, sans confirmation.
  • Dans un SET, les colonnes se séparent par des virgules : AND ne provoque pas d'erreur, mais donne un résultat faux.
  • Zéro ligne affectée n'est pas une erreur : c'est la condition qui ne trouve rien.
  • DELETE vide des lignes, DROP TABLE supprime la table.
  • Une base n'a pas de corbeille : une fois les modifications écrites, seule une sauvegarde permet de revenir en arrière.
  • Les trous dans les id sont normaux : on ne renumérote jamais.

✅ Teste-toi

  1. Range ces instructions en DDL ou en DML : SELECT, CREATE TABLE, UPDATE, DROP TABLE, INSERT, ALTER TABLE, DELETE.
  2. Quel type choisis-tu pour un code postal, et pourquoi ?
  3. Trouve l'erreur : CREATE TABLE local (code TEXT, etage INTEGER,);
  4. Quelle différence y a-t-il entre NULL et le texte vide '' ?
  5. Une colonne email TEXT UNIQUE peut-elle contenir deux lignes sans adresse ? Que faut-il ajouter pour l'interdire ?
  6. Pourquoi n'écrit-on pas AUTOINCREMENT avec SQLite ?
  7. Tu dois ajouter une colonne telephone à une table qui contient déjà 200 lignes. Quelle instruction utilises-tu, et pourquoi pas DROP TABLE suivi de CREATE TABLE ?
  8. Après INSERT INTO professeur (nom, prenom, email) VALUES ('Leroy', 'Anne', 'a.leroy@ecole.be');, que valent actif et telephone ?
  9. Que signifie le message UNIQUE constraint failed: professeur.email ?
  10. Quelles sont les quatre étapes pour importer un fichier CSV dans une table qui n'a pas les mêmes colonnes ?
  11. Décris la méthode « le SELECT d'abord » avant un UPDATE.
  12. Pourquoi vise-t-on WHERE id = 12 plutôt que WHERE nom = 'Lambert' ?
  13. Tu as exécuté un UPDATE sans WHERE, sans écrire les modifications. Que fais-tu ?
  14. Quelle différence y a-t-il entre DELETE FROM professeur; et DROP TABLE professeur; ?
  15. Après suppression de la ligne 7, un collègue veut renuméroter les id pour boucher le trou. Que lui réponds-tu ?
Réponses
  1. DDL : CREATE TABLE, ALTER TABLE, DROP TABLE. DML : SELECT, INSERT, UPDATE, DELETE.
  2. TEXT : on ne calcule jamais avec un code postal, et un code qui commence par zéro perdrait ce zéro en INTEGER.
  3. La virgule après etage INTEGER : il n'y a jamais de virgule après la dernière colonne.
  4. NULL signifie qu'aucune valeur n'a été fournie ; '' est une valeur, un texte qui ne contient aucun caractère.
  5. Oui : UNIQUE accepte plusieurs NULL. Pour l'interdire, on ajoute NOT NULL : email TEXT NOT NULL UNIQUE.
  6. Parce qu'une colonne INTEGER PRIMARY KEY se remplit déjà toute seule.
  7. ALTER TABLE … ADD COLUMN telephone TEXT;. DROP TABLE détruirait les 200 lignes.
  8. actif vaut 1 (sa valeur DEFAULT) et telephone vaut NULL (pas de valeur par défaut).
  9. La ligne est refusée parce que cette adresse e-mail existe déjà dans la colonne email de la table professeur.
  10. Importer le fichier dans une table de passage ; vérifier son contenu avec un SELECT ; copier les lignes avec INSERT … SELECT ; supprimer la table de passage avec DROP TABLE.
  11. Écrire un SELECT avec le WHERE voulu, compter les lignes renvoyées, remplacer le début par UPDATE table SET … en gardant le même WHERE, exécuter, comparer le nombre de lignes affectées, vérifier avec un SELECT.
  12. L'id est unique et ne change jamais ; un nom peut être partagé par plusieurs personnes.
  13. Clic sur Annuler les modifications : la base revient au dernier enregistrement.
  14. DELETE FROM professeur; supprime toutes les lignes mais garde la table vide ; DROP TABLE professeur; supprime la table elle-même.
  15. Que c'est normal : un id désigne une ligne, il ne compte pas. Le changer ferait désigner une autre ligne à tout ce qui y fait référence.

Liens utiles

Documentation officielle
Le langage SQL de SQLite 🇬🇧 

Pour aller plus loin