L3 Info : SGBD
 
◃  Ch. 9 Retour sur DDL  ▹
 

Modification de tables sous Oracle

  • Permet de modifier la structure d'une table
  • Syntaxe :
    ALTER TABLE nom action
    
    ALTER TABLE nom ADD (col1 type1, ...);
    
    ALTER TABLE nom MODIFY (col1 type1, ...);
    
    ALTER TABLE nom DROP COLUMN col;
    
  • Exemple :
    CREATE TABLE demo (
        col_un INT,
        col_deux VARCHAR(4),
        col_trois DATE
    );
    
    -- ajout d'une quatrième colonne
    ALTER TABLE demo ADD (col_quatre CHAR(2));
    
    INSERT INTO demo VALUES (2, 'abcd', to_date('1999-01-01','YYYY-MM-DD'), NULL);
    
    ALTER TABLE demo MODIFY (col_deux VARCHAR(3));
      -- génére une erreur car Oracle interdit la réduction de taille d'une colonne
    ALTER TABLE demo MODIFY (col_deux VARCHAR(5));
      -- fonctionne (extension de la taille du varchar)
    ALTER TABLE demo MODIFY (col_deux VARCHAR(6) NOT NULL);
    ALTER TABLE demo MODIFY (col_deux VARCHAR(6) NULL);
    ALTER TABLE demo MODIFY (col_deux VARCHAR(6) PRIMARY KEY);
    ALTER TABLE demo MODIFY (col_deux VARCHAR(6) NOT NULL);
    
    -- ajout d'une constrainte nommée
    -- elle est définie de la même façon que lors de la création d'une table
    ALTER TABLE demo ADD CONSTRAINT pk_demo PRIMARY KEY (col_un);
    -- suppression d'une contrainte
    ALTER TABLE demo DROP CONSTRAINT pk_demo;
    
    -- renommage de colonne
    ALTER TABLE demo RENAME COLUMN col_quatre TO col4;
    
    -- suppression de la quatrième colonne
    ALTER TABLE demo DROP COLUMN col4;
  • Les colonnes modifiées ou supprimées doivent déjà exister.
  • Une colonne suprimée ne peut être référencée par une clé étrangère ou par un index.
  • On ne peut pas réduire la taille d'une colonne.
  • MySQL utilise une syntaxe similaire mais ne modifie ou n'ajoute qu'une colonne à la fois et n'utilise pas les parenthèses.