Conception Et Réalisation (MySQL) by Grare Stéphane - HTML preview

PLEASE NOTE: This is an HTML preview only and some elements such as links or page numbers may be incorrect.
Download the book in PDF, ePub, Kindle for a complete version.

Par le code

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

index-39_1.jpg

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;