L3 Info : SGBD
 
◃  Ch. 9 SQL : DDL (Partie 2)  ▹
 

Modification de tables sous MySQL

  • Exemple avec la table Demo définie sans contraintes
    CREATE TABLE demo (
    col_un int,
    col_deux varchar(4),
    col_trois date
    );
  • Ajout de colonnes (idem pour PorsgreSQL) :
    ALTER TABLE nom ADD COLUMN colnom type [col_constraint[...]]
    ALTER TABLE demo ADD COLUMN col_quatre CHAR(2);
  • Suppression de colonnes (idem pour PostgreSQL) :
    ALTER TABLE nom DROP COLUMN colnom
    
    ALTER TABLE demo DROP COLUMN col_quatre;
  • Modification de type :
    ALTER TABLE nom MODIFY [COLUMN] colnom nouvtype
    
    INSERT INTO demo VALUES (2, 'abcd', '1999-01-01');
    ALTER TABLE demo MODIFY COLUMN col_deux VARCHAR(3);
    -- génére une erreur car une donnée existe de taille supérieure à trois
    ALTER TABLE demo MODIFY col_quatre CHAR(1);
    -- valide : n'entraine pas de suppression d'information
  • Modification de contrainte :
    ALTER TABLE nom [ADD | DROP] [CONSTRAINT nomContrainte] definitionContraine?
    ALTER COLUMN colnom [SET DEFAULT val | DROP DEFAULT]
    
    -- ajout d'une contrainte de clé primaire
    ALTER TABLE demo ADD PRIMARY KEY(col_un);
    -- la col_deux devient obligatoire (redéfinition complète du type)
    ALTER TABLE demo MODIFY col_deux VARCHAR(5) NOT NULL; 
    -- impossible de rendre obligatoire col_quatre
    -- un enregistrement possède cet attribut non renseigné
    ALTER TABLE demo MODIFY col_quatre CHAR(1) NOT NULL; -- impossible
    -- ajout d'une contrainte de domaine nommée
    ALTER TABLE demo ADD CONSTRAINT domaineLimite
    CHECK (col_trois BETWEEN '1970-01-01' AND '2050-01-01');
    -- suppression de la contrainte nommée
    ALTER TABLE demo DROP CONSTRAINT domaineLimite;
    -- suppression de la clé primaire
    ALTER TABLE demo DROP PRIMARY KEY;
  • Renommage de colonnes :
    ALTER TABLE name RENAME COLUMN  colnom TO nouvcolnom
    
    ALTER TABLE demo RENAME COLUMN col_quatre TO col4;
  • Pour aller plus dans le détail (https://dev.mysql.com/doc/refman/8.1/en/alter-table.html)