Chapitre 5Projet SunuShop

Modifier la structure — ALTER TABLE

ADD COLUMN, DROP COLUMN, MODIFY, CHANGE, RENAME TABLE. Ajouter/supprimer des contraintes et index. Bonnes pratiques (backup avant, tester en dev). Application : ajouter weight_kg, discount_percent, brand. Créer tags + product_tag.

Concepts Théoriques

Vous avez créé les tables categories et products aux chapitres 1-2. Mais en entreprise, la structure d'une base de données évolue constamment. Un client demande de pouvoir filtrer par marque — il faut ajouter une colonne brand. Le livreur a besoin du poids des colis — il faut ajouter weight_kg. L'équipe marketing veut des tags sur les produits — il faut une nouvelle table. ALTER TABLE modifie une table existante sans perdre les données qu'elle contient.

Ce chapitre arrive ici — après le CRUD de base et avant les relations — parce que modifier la structure est un besoin qui survient DÈS que vous commencez à travailler avec vos tables. Mieux vaut l'apprendre maintenant, avant de construire le reste du schéma.

Ajouter une colonne

ALTER TABLE products ADD COLUMN weight_kg DECIMAL(6,2) AFTER stock;

AFTER positionne la nouvelle colonne après une colonne existante. Sans AFTER, elle se place à la fin. Toutes les lignes existantes auront NULL dans la nouvelle colonne (ou la valeur DEFAULT si vous en spécifiez une).

Vous pouvez ajouter plusieurs colonnes d'un coup : ALTER TABLE products ADD COLUMN discount_percent TINYINT UNSIGNED DEFAULT 0, ADD COLUMN brand VARCHAR(100);

Supprimer une colonne

ALTER TABLE products DROP COLUMN brand;

TOUTES les données de cette colonne disparaissent immédiatement et irréversiblement. Il n'y a pas de corbeille en SQL. Réfléchissez à deux fois, et faites un backup avant.

Modifier une colonne

Changer le type ou les contraintes (garder le nom) : ALTER TABLE products MODIFY COLUMN description TEXT NOT NULL;

Renommer et modifier en même temps : ALTER TABLE products CHANGE COLUMN sku reference VARCHAR(100) UNIQUE;

MODIFY garde le même nom, CHANGE permet de renommer.

Ajouter et supprimer des contraintes

Ajouter une clé étrangère après coup : ALTER TABLE products ADD CONSTRAINT fk_products_category FOREIGN KEY (category_id) REFERENCES categories(id);

Supprimer une clé étrangère : ALTER TABLE products DROP FOREIGN KEY fk_products_category;

Ajouter un index : CREATE INDEX idx_products_price ON products(price);

Supprimer un index : DROP INDEX idx_products_price ON products;

Renommer une table

RENAME TABLE product_tags TO product_tag; — convention Laravel : table pivot au singulier.

Bonnes pratiques avant une modification

  1. Sauvegardez la base (mysqldump) avant CHAQUE modification structurelle en production
  2. Testez d'abord sur une base de développement ou une copie
  3. Vérifiez avec DESCRIBE et SHOW CREATE TABLE après la modification
  4. Sur de très grosses tables (millions de lignes), ALTER TABLE peut prendre du temps et bloquer les écritures — planifiez en heures creuses
  5. Documentez chaque modification (en commentaire SQL ou dans un fichier de migration)

En Laravel, les modifications de structure sont gérées par les migrations (fichiers PHP versionnés) — vous n'écrivez pas de ALTER TABLE manuellement. Mais comprendre ce que les migrations font en coulisses est essentiel.