Apprenez en lisant dans l'ordre

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.

Pièces syntaxiques d'une instruction INSERT
INSERT INTO table(liste de colonnes)VALUES (liste de valeurs);Table cibleColonnes à remplir(optionnel)Liste de valeurs(dans l'ordre des colonnes)
Une instruction INSERT enchaîne trois blocs : 'INSERT INTO nom_table', '(liste de colonnes)' et 'VALUES (liste de valeurs);'. La liste de colonnes est optionnelle — quand elle est omise, les valeurs doivent couvrir toutes les colonnes, dans l'ordre où elles ont été définies.

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é.

Structure d'un INSERT (forme de base)
INSERT INTO(liste de colonnes)VALUES (liste de valeurs)Nom de tablebookColonnes à remplir(title, price)Liste de valeurs('Intro à SQL', 1980)Table cibleChoisis les colonnesListe les valeurs
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).

Imagine que tu enregistres un nouveau livre dans une base de données de livres. (Exécute correctement et l'explication apparaîtra.)

① Insère 1 ligne dans la table book.

② Spécifie seulement deux colonnes, title et price. Les valeurs sont title='SQL pratique' et price=2480.

③ Enfin, exécute SELECT * FROM book; et confirme que id a été auto-numéroté et que published_on est NULL.

Éditeur SQL

Exécutez une requête pour voir les résultats

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.

Forme avec colonnes nommées vs. forme sans liste de colonnes
Seulement les colonnes utiles / ALTER OKToutes les colonnes en ordre / casse sur ALTERForme avec colonnes nommées(recommandée)INSERT INTO task (title, done) VALUES ('Ménage', 0);Forme sans liste de colonnes(raccourci)INSERT INTO task VALUES ('Ménage', 0);
La forme nommée explicite uniquement les colonnes que tu remplis ; la forme sans liste liste toutes les colonnes dans l'ordre. La version la plus courte est fragile quand des colonnes sont ajoutées plus tard.
-- 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 ».

Imagine que tu enregistres une nouvelle tâche dans une app todo.

① INSERT 1 ligne dans la table task avec la liste de colonnes omise.

② L'ordre des colonnes de task est titledone. Utilise title='Courses' et done=0, dans cet ordre.

③ Enfin, exécute SELECT * FROM task; et confirme que la ligne a été enregistrée.

Éditeur SQL

Exécutez une requête pour voir les résultats

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;
INSERT multi-lignes — chaque () dans VALUES est une ligne
idnameprice() dans VALUES1(auto)Pomme150('Pomme', 150)2(auto)Banane100('Banane', 100)3(auto)Orange200('Orange', 200)Ligne 1Ligne 2Ligne 3
Un () après VALUES ajoute une ligne ; N () séparés par des virgules ajoutent N lignes. À l'intérieur de chaque (), les valeurs suivent le même ordre que la liste de colonnes.

Imagine que tu amorces un site e-commerce avec trois produits initiaux.

① INSERT 3 lignes d'un coup dans la table product.

② Spécifie deux colonnes, name et price. Les trois lignes sont ('Crayon', 80) / ('Gomme', 120) / ('Cahier', 250).

③ Enfin, exécute SELECT * FROM product; et confirme 3 lignes avec des valeurs id auto-numérotées.

Éditeur SQL

Exécutez une requête pour voir les résultats

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.

Crée une table de travail task_v2 et observe l'INSERT sans liste de colonnes casser après un ALTER TABLE.

① Supprime toute table existante de même nom avec DROP TABLE IF EXISTS task_v2;, puis crée une table à 2 colonnes avec CREATE TABLE task_v2 (title TEXT, done INTEGER);.

② Exécute INSERT INTO task_v2 VALUES ('Courses', 0); — ça réussit tant que la table a 2 colonnes (la forme sans liste de colonnes fonctionne).

③ Exécute ALTER TABLE task_v2 ADD COLUMN due_on TEXT; pour ajouter une 3e colonne.

④ Exécute à nouveau INSERT INTO task_v2 VALUES ('Lecture', 0);. Cette fois seulement 2 valeurs pour 3 colonnes — ça doit être rejeté avec une erreur.

(Cet exercice est correct quand une erreur revient.)

Éditeur SQL

Exécutez une requête pour voir les résultats
QUIZ

Vérification des connaissances

Répondez à chaque question une par une.

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 ?

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 ?