Chapitre 2Projet SunuShop

Insérer des données — INSERT

INSERT INTO ... VALUES (une ligne, plusieurs lignes). Guillemets et types. AUTO_INCREMENT. Apostrophes et échappement. ON DUPLICATE KEY UPDATE. Seed : 5 catégories + 20 produits sénégalais réalistes.

Concepts Théoriques

Maintenant que les tables existent, il faut les remplir. La commande INSERT INTO ajoute des lignes dans une table. C'est l'opération la plus simple du SQL, mais elle a des subtilités importantes.

La syntaxe de base

INSERT INTO table (colonne1, colonne2, colonne3) VALUES ('valeur1', 'valeur2', 'valeur3');

Listez TOUJOURS les colonnes explicitement — même si vous remplissez toutes les colonnes. Pourquoi ? Parce que si quelqu'un ajoute une colonne à la table plus tard, votre INSERT sans colonnes va planter (le nombre de valeurs ne correspondra plus). C'est une bonne pratique professionnelle.

Les guillemets — une source d'erreur fréquente

Les strings (texte) et les dates sont entourées de guillemets simples : 'Dakar', '2026-03-24', 'Tissu Wax Ankara'. Les guillemets doubles fonctionnent en MySQL mais PAS en SQL standard — prenez l'habitude des guillemets simples.

Les nombres n'ont JAMAIS de guillemets : 15000, 3.5, 42. Mettre des guillemets autour d'un nombre ('15000') fonctionne mais force MySQL à convertir — c'est plus lent et source de bugs.

Les booléens sont 1 (true) ou 0 (false), sans guillemets. Vous pouvez aussi écrire TRUE et FALSE directement.

NULL (absence de valeur) s'écrit sans guillemets : NULL, pas 'NULL'. La string 'NULL' et la valeur NULL sont deux choses complètement différentes — 'NULL' est le texte "NULL", NULL signifie "pas de valeur".

Insérer plusieurs lignes en une seule requête

INSERT INTO table (col1, col2) VALUES ('val1a', 'val2a'), ('val1b', 'val2b'), ('val1c', 'val2c');

C'est BEAUCOUP plus performant qu'un INSERT par ligne. MySQL fait un seul aller-retour au lieu de trois. Sur 1000 lignes, la différence est massive (1 requête vs 1000 requêtes).

AUTO_INCREMENT et colonnes omises

La colonne id (AUTO_INCREMENT) n'est JAMAIS spécifiée dans l'INSERT — MySQL attribue le numéro suivant automatiquement. Si vos id sont 1, 2, 3 et que vous supprimez le 3, le prochain sera 4, pas 3. MySQL ne réutilise pas les id supprimés.

Les colonnes avec DEFAULT ou qui acceptent NULL peuvent être omises de l'INSERT — MySQL utilise la valeur par défaut ou NULL.

L'apostrophe dans les données

Si une valeur contient une apostrophe, échappez-la avec un antislash : 'L'homme' ou doublez-la : 'L''homme'. En pratique, quand vous utiliserez PHP (requêtes préparées), ce problème sera géré automatiquement. Mais en SQL pur, c'est une erreur fréquente.

INSERT ... ON DUPLICATE KEY UPDATE

Si vous insérez une ligne avec un UNIQUE qui existe déjà, MySQL déclenche une erreur. Pour gérer ce cas : INSERT INTO products (slug, name, price) VALUES ('wax-ankara', 'Wax Ankara', 15000) ON DUPLICATE KEY UPDATE price = 15000; — si le slug existe déjà, le prix est mis à jour au lieu de créer une erreur.