La commande ALTER TABLE est une requête permettant la modification d'une table en ajoutant, en supprimant ou en changeant les colonnes, leur définition ou les contraintes.

Syntaxe pour Oracle
ALTER TABLE Nom_Table 
  |
  { MODIFY CONSTRAINT nom_contrainte définition_contrainte
  |
  DROP
  { PRIMARY KEY | UNIQUE ( nom_colonne [, nom_colonneN] ) }
      | CONSTRAINT nom_contrainte
  }
  |
  { ADD nom_colonne type_donnée [, nom_colonneN type_donnée ]
  | MODIFY ( nom_colonne [type_donnée] [ définition_contrainte ]
              [, nom_colonneN [type_donnée] [ définition_contrainte ] ]
  | DROP [ COLUMN ]
              nom_colonne | ( nom_colonne [, nom_colonneN ] )
        [ CASCADE CONSTRAINT ] | INVALIDATE
  }
Syntaxe pour SQL Server
ALTER TABLE table
{ [ ALTER COLUMN nom_colonne nouveau_type ]
  | ADD
      { [ nom_colonne nouveau_type ]
        | nom_colonne AS expression_colonne_calculée
      } [ ,...n ]
  | [ WITH CHECK | WITH NOCHECK ] ADD
        { définition_contrainte } [ ,...n ]
  | DROP
        { [ CONSTRAINT ] nom_contrainte 
        | COLUMN nom_colonne } [ ,...n ]
  | { CHECK | NOCHECK } CONSTRAINT 
        { ALL | nom_contrainte [ ,...n ] }

La commande ALTER TABLE est très complète puisqu'elle permet :

  • de modifier le type d'une colonne (ALTER | MODIFY COLUMN),
  • d'ajouter de nouvelles colonnes (ADD nom_colonne),
  • d'ajouter de nouvelles conraintes (ADD définition_contrainte) avec la clause CONSTRAINT précitée et indique si les données de la table doivent être ou ne pas être vérifiées (WITH CHECK | WITH NOCHECK) par rapport à une contrainte FOREIGN KEY ou CHECK nouvellement ajoutée,
  • de supprimer des colonnes (DROP COLUMN),
  • de supprimer des contraintes (DROP CONSTRAINT),
  • d'activer (CHECK) ou de désactiver (NOCHECK) toutes les contraintes (ALL) ou certaines.
Exemple
ALTER TABLE tbl_produit ADD CONSTRAINT chk_code
   CHECK (num <= 100)
   DISABLE CONSTRAINT chk_code;

CREATE TABLE tbl_produit ( num INTEGER PRIMARY KEY)
GO
ALTER TABLE tbl_produit
  ADD designation VARCHAR(50) NULL,
        description VARCHAR(255) NULL,
        code_magasin VARCHAR(12) UNIQUE,
        prix REAL NOT NULL
GO

ALTER TABLE tbl_produit
  MODIFY CONSTRAINT chk_code
  CHK ( num >= 0 AND code <= 1000000000 )
  ENABLE CONSTRAINT chk_code;

ALTER TABLE tbl_produit
  DROP COLUMN code_magasin
GO

ALTER TABLE tbl_produit
  DROP PRIMARY KEY

ALTER TABLE tbl_produit
  ALTER COLUMN prix DECIMAL(7, 2)
GO

Les exemples terminés par l'instruction GO sont écrits sous SQL Server, les autres pour Oracle.