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
- Sauvegardez la base (mysqldump) avant CHAQUE modification structurelle en production
- Testez d'abord sur une base de développement ou une copie
- Vérifiez avec DESCRIBE et SHOW CREATE TABLE après la modification
- Sur de très grosses tables (millions de lignes), ALTER TABLE peut prendre du temps et bloquer les écritures — planifiez en heures creuses
- 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.