Passer au contenu principal
eLearner.app
Module 8 · Leçon 1 sur 429/57 dans le cours~10 min
Leçons du module (1/4)

Insérer des données : INSERT

Jusqu'à présent, vous avez lu des données. Il est temps d'en écrire. INSERT est la commande qui ajoute de nouvelles lignes à une table.

La syntaxe de base

SQL
INSERT INTO tabella (col1, col2, …)
VALUES (val1, val2, …);

Exemple sur notre jeu de données :

SQL
INSERT INTO customers (first_name, last_name, email, city, country, signed_up_on)
VALUES ('Marco', 'Bianchi', 'marco.bianchi@example.com', 'Verona', 'Italia', '2025-07-15');

Nommer les colonnes est la pratique recommandée : cela rend la requête robuste face aux futures modifications de schéma (par exemple, une nouvelle colonne phone facultative) ne casse rien) et auto-documenté.

INSERT multi-lignes

Une seule instruction, plusieurs lignes – beaucoup plus rapide que N INSERT distincts :

SQL
INSERT INTO categories (name, parent_id) VALUES
  ('Gaming',         1),
  ('Smart Home',     1),
  ('Cucina vegana',  8);

RETURNING : lecture des valeurs que vous venez d'insérer

Une clause caractéristique de PostgreSQL : RETURNING renvoie les lignes qui viennent d'être créés. Extrêmement pratique pour récupérer le id généré automatiquement :

SQL
INSERT INTO categories (name, parent_id)
VALUES ('Gaming', 1)
RETURNING id, name;

La sortie est un tableau à une ligne avec id (attribué par SERIAL) et name.

Que se passe-t-il si une colonne est manquante

Si vous omettez une colonne dans le INSERT :

  • s'il s'agit de NOT NULL sans DEFAULT → erreur ;
  • s'il possède un DEFAULT (incluant SERIAL pour id) → qui est utilisé ;
  • s'il accepte NULL → il devient NULL.
SQL
-- Va bene: id è SERIAL (auto), country ha NOT NULL ma forniamo tutti i campi
INSERT INTO customers (first_name, last_name, email, city, country, signed_up_on)
VALUES ('Olivia', 'Marini', 'olivia.marini@example.com', 'Bari', 'Italia', '2025-07-20');

-- Errore: first_name è NOT NULL e non è fornito
INSERT INTO customers (last_name, email, city, country, signed_up_on)
VALUES ('Marini', 'olivia.marini@example.com', 'Bari', 'Italia', '2025-07-20');

A ton tour

Exercice#sql.m8.l1.e1
Tentatives : 0Chargement…

Insérez dans la table des clients un nouveau client avec le prénom 'Marco', le nom 'Bianchi', l'e-mail 'marco.bianchi@example.com', la ville 'Vérone', le pays 'Italia' et le signé_up_on '2025-07-15'. Nommez explicitement toutes les colonnes.

Chargement de l'éditeur…
Afficher l'indice

L'ordre des valeurs dans VALUES doit correspondre à l'ordre des colonnes que vous avez nommées.

Solution disponible après 3 tentatives

Exercice de révision

Exercice#sql.m8.l1.e2
Tentatives : 0Chargement…

Insérez une nouvelle catégorie « Gaming » en tant qu'enfant de « Elettronica » (id = 1). Utilisez la clause RETURNING pour renvoyer l'identifiant et le nom de la catégorie nouvellement créée.

Chargement de l'éditeur…
Afficher l'indice

RETURNING accepte une liste de colonnes (ou '*') exactement comme un SELECT.

Solution disponible après 3 tentatives