![Free-eBooks.net](/resources/img/logo-nfe.png)
![All New Design](/resources/img/allnew.png)
Nous pouvons modifier nos tables en utilisant les requêtes SQL. La modification de table est
effectuée par la commande ALTER TABLE. Lors d’une modification de table, il est possible
d’ajouter et de supprimer des colonnes et des contraintes, de modifier la définition d’une
colonne (type de données, classement et comportement vis-à-vis de la valeur NULL), d’activer
ou de désactiver les contraintes d’intégrité et les déclencheurs. Ce dernier point peut s’avérer
utile lors d’import massif de données dans la base si l’on souhaite conserver des temps de
traitements cohérents.
ALTER [IGNORE] TABLE tbl_name
alter_specification [, alter_specification] ...
alter_specification:
ADD [COLUMN] column_definition [FIRST | AFTER col_name ]
| ADD [COLUMN] (column_definition,...)
37
| ADD INDEX [index_name] [index_type] (index_col_name,...)
| ADD [CONSTRAINT [symbol]]
PRIMARY KEY [index_type] (index_col_name,...)
| ADD [CONSTRAINT [symbol]]
UNIQUE [index_name] [index_type] (index_col_name,...)
| ADD [FULLTEXT|SPATIAL] [index_name] (index_col_name,...)
| ADD [CONSTRAINT [symbol]]
FOREIGN KEY [index_name] (index_col_name,...)
[reference_definition]
| ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
| CHANGE [COLUMN] old_col_name column_definition
[FIRST|AFTER col_name]
| MODIFY [COLUMN] column_definition [FIRST | AFTER col_name]
| DROP [COLUMN] col_name
| DROP PRIMARY KEY
| DROP INDEX index_name
| DROP FOREIGN KEY fk_symbol
| DISABLE KEYS
| ENABLE KEYS
| RENAME [TO] new_tbl_name
| ORDER BY col_name
| CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]
| [DEFAULT] CHARACTER SET charset_name [COLLATE collation_name]
| DISCARD TABLESPACE
| IMPORT TABLESPACE
| table_options
ALTER TABLE vous permet de changer la structure d'une table existante. Par exemple, vous
pouvez ajouter ou supprimer des colonnes, des index, changez le type des colonnes
existantes, renommez ces colonnes, ou la table elle-même. Vous pouvez de même changer le
commentaire sur la table, ou le type de celle-ci.
Si vous utilisez ALTER TABLE pour modifier les spécifications d'une colonne, mais que
DESCRIBE nom_de_table vous indique que cette colonne n'a pas été modifiée, il est possible
que MySQL ait ignoré vos modifications. Par exemple, si vous essayez de changer une colonne
de type VARCHAR en CHAR, MySQL continuera d'utiliser VARCHAR si la table contient
d'autres colonnes de taille variable.
ALTER TABLE effectue une copie temporaire de la table originale. Les modifications sont
faites sur cette copie, puis l'original est effacé, et enfin la copie est renommée pour remplacer
l'originale. Cette méthode permet de rediriger toutes les commandes automatiquement vers
la nouvelle table sans pertes. Durant l'exécution de ALTER TABLE, la table originale est
lisible par d'autres clients. Les modifications et insertions sont reportées jusqu'à ce que la
nouvelle table soit prête.
Notez que si vous utilisez une autre option que RENAME avec ALTER TABLE, MySQL créera
toujours une table temporaire, même si les données n'ont pas besoin d'être copiées (comme
quand vous changez le nom d'une colonne). Nous avons prévu de corriger cela dans les
versions suivantes, mais comme la commande ALTER TABLE n'est pas utilisée très souvent,
38
cette correction ne fait pas partie de nos priorités. Pour les tables MyISAM, vous pouvez
accélérer la réindexation (qui est la partie la plus lente de la modification d'une table) en
donnant à la variable système myisam_sort_buffer_size une valeur plus grande.
Quelques exemples :
ALTER TABLE ENTCOM add constraint FK_ATTRIBUER foreign key (NUMFOU)
references FOURNISSEUR (NUMFOU);
ALTER TABLE t1 CHANGE c1 c1 BLOB;
ALTER TABLE t1 CHANGE c1 c1 TEXT CHARACTER SET utf8;