- 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)