SQL ALTER TABLE

Par :

,le

La commande SQL ALTER TABLE modifie la structure d’une table déjà existante. Elle permet d’ajouter ou de supprimer des colonnes, de créer des clés primaires ou étrangères, d’ajouter des index ou de changer le type d’un champ. Le renommage de table est traité séparément dans cet article : le renommage des tables.

Définition ALTER TABLE

ALTER TABLE ajuste les tables créées précédemment par l’instruction CREATE TABLE dans la Bdd. L’ajout de champs dans la table étend ses capacités sans effacer les enregistrements existants. La suppression élimine un champ avec toutes ses valeurs historiques associées de la base de données. ALTER TABLE répond à ces adaptations sans recréer la table entière ce qui préserve la continuité des opérations en cours.

Syntaxe de base pour la commande SQL ALTER TABLE

ALTER TABLE tableName
ADD newField varchar(255);
MODIFY anotherField VARCHAR(255);

ALTER TABLE commence par le nom de la table cible suivi de l’action requise.

  • ALTER TABLE commence par le nom de la table cible, suivi d’une ou plusieurs actions.
  • ADD ajoute une nouvelle colonne avec son type et ses éventuelles contraintes.
  • MODIFY (ou ALTER COLUMN selon le SGBD) adapte le type ou les propriétés d’une colonne existante.
  • DROP supprime une colonne de manière irréversible.

Plusieurs opérations peuvent être enchaînées dans une seule commande, séparées par des virgules.

Opérations courantes et commandes SQL sur les colonnes

Ajout d’une nouvelle colonne avec la commande ADD

Cette commande ajoute la colonne allergenes à la fin de la table produits. Les lignes déjà présentes reçoivent NULL dans cette nouvelle colonne, et le type ainsi que les contraintes s’appliquent à toutes les insertions futures.

ALTER TABLE produits 
ADD allergenes VARCHAR(500);

renommer une colonne SQL dans la base données

Dans tous les cas, les données existantes sont conservées. En revanche, les vues, procédures stockées ou requêtes qui utilisent l’ancien nom de colonne doivent être mises à jour manuellement.

-- MySQL
ALTER TABLE clients CHANGE old_telephone numero_telephone VARCHAR(20);

-- PostgreSQL
ALTER TABLE clients RENAME COLUMN old_phone TO telephone;

-- Renommer une colonne sql server
EXEC sp_rename 'clients.old_phone', 'telephone', 'COLUMN';

Modifier le type d’une colonne avec ALTER COLUMN

Cette commande change le type de la colonne montant. Les valeurs compatibles sont converties automatiquement ; en cas de type incompatible, le SGBD peut refuser la modification ou tronquer les données. Il est recommandé de tester la conversion sur un environnement de préproduction avant de l’appliquer en production.

ALTER TABLE prix 
ALTER COLUMN montant TYPE DECIMAL(12,4);

Supprimer une colonne avec DROP COLUMN

DROP COLUMN supprime la colonne et toutes les données qu’elle contient. Cette opération est définitive et nécessite des droits suffisants. Les index, vues ou procédures qui dépendaient de cette colonne doivent être vérifiés et ajustés après la suppression.

ALTER TABLE commandes 
DROP COLUMN notes_internes;

Modifier les contraintes avec ALTER TABLE

Ajouter une clé primaire avec ADD PRIMARY KEY

Cette commande définit identifiant comme clé primaire. La colonne doit déjà être unique et non NULL, sinon l’opération échoue. La clé primaire crée aussi un index qui accélère les recherches et les jointures sur cette colonne.

ALTER TABLE table_sans_cle 
ADD PRIMARY KEY (identifiant);

Ajouter une clé étrangère avec ADD FOREIGN KEY

La clé étrangère impose que chaque valeur de facture_id existe dans factures(id). Le moteur empêche ainsi la création de lignes orphelines et maintient la cohérence entre tables.

ALTER TABLE details_facture 
ADD FOREIGN KEY (facture_id) REFERENCES factures(id);

Supprimer une contrainte avec DROP CONSTRAINT

Supprimer une contrainte retire la validation automatique associée, qu’il s’agisse d’une clé primaire, d’une clé étrangère ou d’un CHECK. En pratique, la syntaxe exacte varie selon le SGBD (par exemple, DROP FOREIGN KEY en MySQL).

ALTER TABLE ancienne_structure 
DROP CONSTRAINT lien_obsolète;

Ajouter ou supprimer des index pour accroître les performances

Ajouter un index

Cet index accélère les requêtes qui filtrent ou trient sur ville et nom. Le moteur peut alors éviter un scan complet de la table et accéder plus rapidement aux lignes correspondantes.

ALTER TABLE clients 
ADD INDEX idx_ville_nom (ville, nom);

Supprimer un index devenu inutile

Supprimer un index libère de l’espace disque et réduit le coût des opérations d’insertion et de mise à jour. Avant de le faire, il est conseillé d’analyser l’usage réel des index (par exemple via SHOW INDEX ou les vues système du SGBD).

ALTER TABLE produits 
DROP INDEX idx_modele_vieux;

Particularités de la commande ALTER TABLE selon les SGBD

PostgreSQL

PostgreSQL utilise ALTER COLUMN ... TYPE pour changer de type et ADD CONSTRAINT pour ajouter des contraintes, comme un CHECK qui valide la forme d’un email.

ALTER TABLE utilisateurs 
ALTER COLUMN email TYPE VARCHAR(320),
ADD CONSTRAINT email_valide CHECK (email ~ '.*@.*\..*');

MySQL

MySQL propose CHANGE pour renommer une colonne en modifiant son type en même temps, et MODIFY pour changer uniquement le type. Les clés étrangères nécessitent un moteur comme InnoDB.

ALTER TABLE articles 
CHANGE ancien_titre titre VARCHAR(255),
ADD COLUMN vues INT DEFAULT 0;

SQL Server

SQL Server distingue clairement l’ajout de colonne (ADD) des modifications sur les colonnes existantes. Certaines opérations peuvent impliquer une reconstruction d’index (CLUSTERED notamment).

ALTER TABLE Orders 
ADD ShippingDate DATE NOT NULL DEFAULT GETDATE();

Bonnes pratiques avec ALTER TABLE en production

Préparation avant une modification sur la table

  • Lister les vues, procédures et fonctions qui utilisent la table cible.
  • Prévoir une sauvegarde ou un snapshot avant toute modification DDL risquée.
  • Tester la commande sur un environnement de staging avec un volume de données représentatif.
-- Identifier dépendances avant DROP COLUMN
SELECT * FROM information_schema.view_column_usage 
WHERE table_name = 'table_cible';

Évolutions régulières

  • Fusionner ou supprimer les index redondants pour conserver un schéma performant.
  • Archiver les colonnes historiques avant de les supprimer.
  • Réduire les VARCHAR surdimensionnés après analyse des données réelles.

Cas pratique e‑commerce

Ajout d’un champ de conformité sur les produits :

ALTER TABLE produits 
ADD conformite_allergenes JSON NOT NULL DEFAULT '[]',
ADD INDEX idx_allergenes (conformite_allergenes);

Ajout de la géolocalisation pour les utilisateurs :

ALTER TABLE utilisateurs 
ADD latitude DECIMAL(10,8),
ADD longitude DECIMAL(11,8),
ADD INDEX idx_position_geo (latitude, longitude);

Ces évolutions illustrent comment ALTER TABLE permet d’adapter progressivement le schéma à de nouveaux besoins (réglementation, logistique) sans interrompre le service ni recréer les tables.

Sources : MySql , Postgresql , SQL Server