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.
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.
| 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 |
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 |
ALTER TABLE professeur ADD COLUMN telephone TEXT;
ALTER TABLE professeur RENAME COLUMN telephone TO gsm;
ALTER TABLE professeur RENAME TO enseignant;
DROP TABLE IF EXISTS import_prof;
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');
INSERT INTO professeur (nom, prenom, email)
SELECT nom, prenom, email
FROM import_prof;
UPDATE eleve
SET absences = absences + 1
WHERE id = 9;
UPDATE professeur
SET actif = 0,
telephone = NULL
WHERE id = 6;
DELETE FROM professeur
WHERE id = 7;
| 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.
INSERT.SELECT après chaque écriture, pour voir ce que la table contient vraiment.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.WHERE id = …) pour modifier ou supprimer une ligne précise.Ctrl+S) seulement quand le résultat est vérifié ; sinon, Annuler les modifications.table.colonne en cause.CREATE TABLE : near ")": syntax error.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.INSERT sans liste de colonnes dépend de l'ordre des colonnes de la table.no such column: …. Une apostrophe dans un texte se double : 'D''Hondt'.UPDATE ou un DELETE sans WHERE touche toutes les lignes, sans confirmation.SET, les colonnes se séparent par des virgules : AND ne provoque pas d'erreur, mais donne un résultat faux.DELETE vide des lignes, DROP TABLE supprime la table.id sont normaux : on ne renumérote jamais.SELECT, CREATE TABLE, UPDATE, DROP TABLE, INSERT, ALTER TABLE, DELETE.CREATE TABLE local (code TEXT, etage INTEGER,);NULL et le texte vide '' ?email TEXT UNIQUE peut-elle contenir deux lignes sans adresse ? Que faut-il ajouter pour l'interdire ?AUTOINCREMENT avec SQLite ?telephone à une table qui contient déjà 200 lignes. Quelle instruction utilises-tu, et pourquoi pas DROP TABLE suivi de CREATE TABLE ?INSERT INTO professeur (nom, prenom, email) VALUES ('Leroy', 'Anne', 'a.leroy@ecole.be');, que valent actif et telephone ?UNIQUE constraint failed: professeur.email ?SELECT d'abord » avant un UPDATE.WHERE id = 12 plutôt que WHERE nom = 'Lambert' ?UPDATE sans WHERE, sans écrire les modifications. Que fais-tu ?DELETE FROM professeur; et DROP TABLE professeur; ?id pour boucher le trou. Que lui réponds-tu ?CREATE TABLE, ALTER TABLE, DROP TABLE. DML : SELECT, INSERT, UPDATE, DELETE.TEXT : on ne calcule jamais avec un code postal, et un code qui commence par zéro perdrait ce zéro en INTEGER.etage INTEGER : il n'y a jamais de virgule après la dernière colonne.NULL signifie qu'aucune valeur n'a été fournie ; '' est une valeur, un texte qui ne contient aucun caractère.UNIQUE accepte plusieurs NULL. Pour l'interdire, on ajoute NOT NULL : email TEXT NOT NULL UNIQUE.INTEGER PRIMARY KEY se remplit déjà toute seule.ALTER TABLE … ADD COLUMN telephone TEXT;. DROP TABLE détruirait les 200 lignes.actif vaut 1 (sa valeur DEFAULT) et telephone vaut NULL (pas de valeur par défaut).email de la table professeur.SELECT ; copier les lignes avec INSERT … SELECT ; supprimer la table de passage avec DROP TABLE.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.id est unique et ne change jamais ; un nom peut être partagé par plusieurs personnes.DELETE FROM professeur; supprime toutes les lignes mais garde la table vide ; DROP TABLE professeur; supprime la table elle-même.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.