Question 1Quand tu exécutes INSERT INTO book (title, price) VALUES ('Intro à SQL', 1980);, qu'arrive-t-il à la colonne id (INTEGER PRIMARY KEY) qui n'était pas dans la liste des colonnes ?
INSERT — ajouter des données à une table
Apprends l'instruction SQL INSERT depuis les bases. Couvre la forme avec colonnes nommées, le raccourci sans liste de colonnes, et l'insertion multi-lignes en masse — trois schémas illustrés avec des tables séparées et exécutés en direct dans ton navigateur.
INSERT — ajouter des lignes à une table
Pour ajouter une nouvelle ligne à une table, tu utilises l'instruction INSERT. SELECT, c'était « lire des données » ; INSERT est l'opération la plus basique pour « insérer des données ». Inscription d'utilisateur, enregistrement d'achats, écriture de logs — la plupart des « enregistrements » d'une app passent par INSERT.
Nommer colonnes et valeurs (forme de base)
La forme la plus courante nomme à la fois les colonnes et les valeurs : INSERT INTO nom_table (col, col, ...) VALUES (val, val, ...);. Après le nom de la table, liste les colonnes entre parenthèses, et après VALUES, liste les valeurs dans le même ordre et le même nombre.
Dans cette forme, toute colonne absente de la liste prend par défaut NULL (ou la DEFAULT de la colonne). Si tu omets une colonne INTEGER PRIMARY KEY, l'auto-numérotation s'enclenche et un entier inutilisé est attribué.
INSERT INTO, c'est « dans quelle table insérer », la liste de colonnes entre parenthèses c'est « quelles colonnes reçoivent des valeurs », et à l'intérieur de VALUES (...) ce sont « les valeurs, dans le même ordre que la liste de colonnes ». Visualise la position et le rôle de chacun.-- Ajoute 1 ligne à book (seulement title et price)
INSERT INTO book (title, price) VALUES ('Intro à SQL', 1980);
-- Vérifie le résultat
SELECT * FROM book;
Et les colonnes omises ?
Les colonnes absentes de la liste reçoivent la DEFAULT de la colonne (ou NULL s'il n'y en a pas). Pour une colonne INTEGER PRIMARY KEY, l'auto-numérotation s'enclenche et un entier inutilisé est attribué (l'équivalent de l'AUTO_INCREMENT de MySQL).
Omettre la liste de colonnes pour remplir toutes les colonnes
Une autre forme est le raccourci sans liste de colonnes, qui liste les valeurs pour toutes les colonnes dans l'ordre : INSERT INTO nom_table VALUES (val, val, ...);. Le mot-clé VALUES vient immédiatement après le nom de la table.
Le compromis pour gagner en concision : tu dois te souvenir de l'ordre des colonnes de la table. Et dès que ALTER TABLE ajoute une colonne plus tard, cette forme se casse parce que le nombre de valeurs ne correspond plus — réserve-la donc à des situations limitées comme le chargement de données temporaires ou des scripts jetables.
-- Ajoute 1 ligne à task (en omettant la liste de colonnes)
INSERT INTO task VALUES ('Ménage', 0);
-- Vérifie le résultat
SELECT * FROM task;
La forme sans liste de colonnes casse avec ALTER TABLE
INSERT INTO task VALUES ('Ménage', 0); fonctionne aujourd'hui parce que la table a 2 colonnes. Si tu exécutes plus tard ALTER TABLE task ADD COLUMN due_on TEXT;, chaque colonne a besoin d'une valeur (3 au total), et cet INSERT casse avec une erreur de nombre de valeurs incohérent.
Pour les apps de production et les scripts, préfère la forme avec colonnes nommées (forme de base) — quand la définition de la table évolue, tu n'as pas à réécrire tes INSERTs. Garde la forme raccourcie pour des cas limités comme « données temporaires à schéma fixe » ou « scripts jetables ».
Ajouter plusieurs lignes d'un coup
Une seule instruction INSERT peut aussi ajouter plusieurs lignes d'un coup. Il suffit de lister plusieurs tuples `(val, val, ...)` séparés par des virgules après VALUES — chaque jeu de parenthèses est une ligne.
Il y a deux raisons de le faire. La première est moins de code, la seconde est qu'un seul aller-retour vers la base est nécessaire, ce qui est plus rapide qu'exécuter un INSERT par ligne. Le chargement en masse depuis des fichiers CSV ou des logs est l'usage standard de cette forme.
-- Ajoute 3 lignes à product d'un coup
INSERT INTO product (name, price) VALUES
('Pomme', 150),
('Banane', 100),
('Orange', 200);
-- Vérifie le résultat
SELECT * FROM product;
Là où la forme sans liste de colonnes casse — quand ALTER TABLE ajoute une colonne
Le callout précédent disait « la forme sans liste de colonnes casse avec ALTER TABLE ». La voir casser une fois te donne une référence concrète à laquelle revenir quand tu décides d'utiliser ou non le raccourci en production.
Pour le dernier exercice de cet article, crée une table de travail `task_v2`, ajoute une colonne avec ALTER TABLE, et essaie le même INSERT sans liste de colonnes avant et après. L'INSERT qui marchait avant échoue avec une « erreur de nombre de valeurs incohérent » au moment où une colonne est ajoutée.
Vérification des connaissances
Répondez à chaque question une par une.
Question 2Lequel des énoncés suivants décrit correctement la forme sans liste de colonnes, INSERT INTO nom_table VALUES (...) ?
Question 3Lequel des suivants est la bonne manière d'écrire un INSERT multi-lignes ?