MySQLi - Commande ALTER

MySQLi ALTER La commande est très utile lorsque vous souhaitez modifier un nom de votre table, n'importe quel champ de table ou si vous souhaitez ajouter ou supprimer une colonne existante dans une table.

Commençons par la création d'une table appelée tutorials_alter.

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> create table tutorials_alter
   -> (
   -> i INT,
   -> c CHAR(1)
   -> );
Query OK, 0 rows affected (0.27 sec)

mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| i     | int(11) | YES  |     | NULL    |       |
| c     | char(1) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.02 sec)

Déposer, ajouter ou repositionner une colonne

Supposons que vous souhaitiez supprimer une colonne existante i à partir de la table MySQLi ci-dessus, vous utiliserez DROP clause avec ALTER commande comme suit -

mysql> ALTER TABLE tutorials_alter  DROP i;

UNE DROP ne fonctionnera pas si la colonne est la seule qui reste dans le tableau.

Pour ajouter une colonne, utilisez ADD et spécifiez la définition de colonne. L'instruction suivante restaure lei colonne à tutorials_alter -

mysql> ALTER TABLE tutorials_alter ADD i INT;

Après avoir émis cette instruction, testalter contiendra les deux mêmes colonnes que lors de la création de la table, mais n'aura pas tout à fait la même structure. En effet, de nouvelles colonnes sont ajoutées par défaut à la fin du tableau. Donc même sii était à l'origine la première colonne de mytbl, maintenant c'est la dernière.

mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c     | char(1) | YES  |     | NULL    |       |
| i     | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.01 sec)

Pour indiquer que vous voulez une colonne à une position spécifique dans la table, utilisez FIRST pour en faire la première colonne ou APRÈS col_name pour indiquer que la nouvelle colonne doit être placée après col_name. Essayez les instructions ALTER TABLE suivantes, en utilisant SHOW COLUMNS après chacune d'elles pour voir l'effet de chacune d'elles -

ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT FIRST;
ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT AFTER c;

Les spécificateurs FIRST et AFTER fonctionnent uniquement avec la clause ADD. Cela signifie que si vous souhaitez repositionner une colonne existante dans une table, vous devez d'abord la SUPPRIMER, puis l'ajouter à la nouvelle position.

Modification d'une définition ou d'un nom de colonne

Pour modifier la définition d'une colonne, utilisez MODIFY ou CHANGEclause avec la commande ALTER. Par exemple, pour changer de colonnec de CHAR (1) à CHAR (10), faites ceci -

mysql> ALTER TABLE tutorials_alter MODIFY c CHAR(10);

Avec CHANGE, la syntaxe est un peu différente. Après le mot-clé CHANGE, vous nommez la colonne que vous souhaitez modifier, puis spécifiez la nouvelle définition, qui inclut le nouveau nom. Essayez l'exemple suivant:

mysql> ALTER TABLE tutorials_alter CHANGE i j BIGINT;

Si vous utilisez maintenant CHANGE pour convertir j de BIGINT en INT sans changer le nom de la colonne, l'instruction sera comme prévu -

mysql> ALTER TABLE tutorials_alter CHANGE j j INT;

L'effet d'ALTER TABLE sur les attributs de valeur nulle et par défaut -

Lorsque vous MODIFIEZ ou CHANGEZ une colonne, vous pouvez également spécifier si la colonne peut contenir ou non des valeurs NULL et quelle est sa valeur par défaut. En fait, si vous ne le faites pas, MySQLi attribue automatiquement des valeurs à ces attributs.

Voici l'exemple, où la colonne NOT NULL aura la valeur 100 par défaut.

mysql> ALTER TABLE tutorials_alter 
   -> MODIFY j BIGINT NOT NULL DEFAULT 100;

Si vous n'utilisez pas la commande ci-dessus, MySQLi remplira les valeurs NULL dans toutes les colonnes.

Modification de la valeur par défaut d'une colonne

Vous pouvez modifier une valeur par défaut pour n'importe quelle colonne à l'aide de la commande ALTER. Essayez l'exemple suivant.

mysql> ALTER TABLE tutorials_alter ALTER j SET DEFAULT 1000;
mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| c     | char(10)   | YES  |     | NULL    |       |
| j     | bigint(20) | NO   |     | 1000    |       |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.02 sec)

Vous pouvez supprimer la contrainte par défaut de n'importe quelle colonne en utilisant la clause DROP avec la commande ALTER.

mysql> ALTER TABLE tutorials_alter ALTER j DROP DEFAULT;
mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| c     | char(10)   | YES  |     | NULL    |       |
| j     | bigint(20) | NO   |     | NULL    |       |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.02 sec)

Modification d'un type de table

Vous pouvez utiliser un type de table en utilisant TYPE clause avec la commande ALTER.

Pour connaître le type actuel d'une table, utilisez l'instruction SHOW TABLE STATUS.

mysql>  SHOW TABLE STATUS LIKE 'tutorials_alter'\G
*************************** 1. row ***************************
           Name: tutorials_alter
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 0
 Avg_row_length: 0
    Data_length: 16384
Max_data_length: 0
   Index_length: 0
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2017-02-17 11:30:29
    Update_time: NULL
     Check_time: NULL
      Collation: latin1_swedish_ci
       Checksum: NULL
 Create_options:
        Comment:
1 row in set (0.00 sec)

Renommer une table

Pour renommer une table, utilisez le RENAMEoption de l'instruction ALTER TABLE. Essayez l'exemple suivant pour renommer tutorials_alter en tutorials_bks.

mysql> ALTER TABLE tutorials_alter RENAME TO tutorials_bks;

Vous pouvez utiliser la commande ALTER pour créer et déposer INDEX sur un fichier MySQL. Nous verrons cette fonctionnalité dans le prochain chapitre.