MYSQL – ALTER, DROP, RENOMMER, MODIFIER
⚡ Résumé intelligent
ALTER, DROP, RENAME et MODIFY sont les MySQL Les commandes de modification permettent de restructurer une base de données en cours d'utilisation. Elles ajoutent, suppriment, renomment et redéfinissent des objets tels que des tables et des colonnes sans supprimer les lignes déjà enregistrées.

Qu'est-ce que la commande ALTER ? MySQL?
Le ALTER Cette commande permet de modifier une base de données, une table, une vue ou tout autre objet de base de données existant qui doit être modifié au cours du cycle de vie de la base de données. C'est la commande qui permet à un schéma d'évoluer après sa création et son remplissage avec des données.
Les besoins métiers évoluent constamment, et la conception d'une base de données doit s'adapter. Imaginons que la base de données Myflix soit déjà implémentée et utilisée par les utilisateurs, et que l'équipe réalise alors seulement qu'il manque des informations essentielles. Personne ne souhaite perdre les données existantes ; il suffit d'y ajouter les nouvelles informations.
La commande ALTER permet précisément de gérer ce type de situation. Elle peut modifier le type de données d'un champ (de chaîne de caractères à nombre), renommer un champ ou ajouter une nouvelle colonne à une table, tout en préservant l'intégrité des données déjà stockées.
Une fois l'objectif de la commande établi, l'étape suivante consiste à définir la syntaxe qui permet de l'exécuter.
MySQL Syntaxe ALTER
La syntaxe de base utilisée pour ajouter une colonne à une table existante est présentée ci-dessous.
ALTER TABLE `table_name` ADD COLUMN `column_name` `data_type`;
ICI. (en anglais seulement)
- "ALTER TABLE `nom_table`" est la commande qui dit MySQL serveur pour modifier la table nommée `table_name`.
- "AJOUTER UNE COLONNE `nom_colonne` `type_données`" est la commande qui dit MySQL serveur pour ajouter une nouvelle colonne nommée `column_name` avec le type de données `data_type`.
Supposons que Myflix ait mis en place la facturation et les paiements en ligne. Pour ce faire, un champ pour le numéro de carte bancaire doit être ajouté à la table des membres. Avant toute modification, il est conseillé d'examiner la structure actuelle de la table. Le script ci-dessous permet de le faire.
SHOW COLUMNS FROM `members`;
| Champ | Type | Null | ACTIVITES | Réglage par défaut | Extra |
|---|---|---|---|---|---|
| numéro de membre | int (11) | NON | PRI | NULL | incrémentation automatique |
| noms complets | varchar (350) | NON | NULL | ||
| le sexe | varchar (6) | OUI | NULL | ||
| date_de_naissance | données | OUI | NULL | ||
| adresse physique | varchar (255) | OUI | NULL | ||
| adresse postale | varchar (255) | OUI | NULL | ||
| numéro_de_contact | varchar (75) | OUI | NULL | ||
| en nous envoyant un mail | varchar (255) | OUI | NULL |
💡 Remarque sur int(11) : Le nombre entre parenthèses correspond uniquement à la largeur d'affichage. MySQL La version 8.0.17 l'a dépréciée pour les types entiers ; un serveur moderne affiche donc cette colonne simplement comme intLa capacité de stockage reste inchangée.
Le script ci-dessous ajoute le nouveau champ à la table des membres.
ALTER TABLE `members` ADD COLUMN `credit_card_number` VARCHAR(25);
L'exécution de ce script sur la base de données myflixdb ajoute une colonne nommée credit_card_number à la table members, de type VARCHAR. L'exécution de la commande SHOW COLUMNS donne le résultat suivant.
| Champ | Type | Null | ACTIVITES | Réglage par défaut | Extra |
|---|---|---|---|---|---|
| numéro de membre | int (11) | NON | PRI | NULL | incrémentation automatique |
| noms complets | varchar (350) | NON | NULL | ||
| le sexe | varchar (6) | OUI | NULL | ||
| date_de_naissance | données | OUI | NULL | ||
| adresse physique | varchar (255) | OUI | NULL | ||
| adresse postale | varchar (255) | OUI | NULL | ||
| numéro_de_contact | varchar (75) | OUI | NULL | ||
| en nous envoyant un mail | varchar (255) | OUI | NULL | ||
| Numéro de Carte de Crédit | varchar (25) | OUI | NULL |
La ligne mise en évidence confirme que le numéro de carte de crédit a été ajouté à la table des membres, et que les données déjà contenues dans les autres colonnes ne sont pas affectées par cet ajout.
L'ajout d'une colonne ne représente que la moitié du travail. Un schéma doit également supprimer les objets dont il n'a plus besoin ; c'est le rôle de la commande DROP.
Qu'est-ce que la commande DROP dans MySQL?
La commande DROP supprime définitivement un objet. Elle est utilisée pour
- Supprimer une base de données de la MySQL serveur.
- Supprimer un objet tel qu'une table ou une colonne d'une base de données.
⚠️ Attention : La commande DROP est irréversible. Ni l'objet ni les lignes qu'il contient ne peuvent être récupérés sans sauvegarde. Il est donc impératif d'exécuter une requête SELECT sur la cible et de vérifier l'existence de la sauvegarde au préalable.
Goutteping une colonne
Dans l'exemple ALTER ci-dessus, une colonne nommée credit_card_number a été ajoutée à la table members. Supposons que la fonctionnalité de facturation en ligne soit reportée et que cette colonne doive être supprimée. Le script suivant permet de le faire.
ALTER TABLE `members` DROP COLUMN `credit_card_number`;
L'exécution du script supprime la colonne credit_card_number de la table members. Un nouvel affichage des colonnes confirme ce résultat.
SHOW COLUMNS FROM `members`;
| Champ | Type | Null | ACTIVITES | Réglage par défaut | Extra |
|---|---|---|---|---|---|
| numéro de membre | int (11) | NON | PRI | NULL | incrémentation automatique |
| noms complets | varchar (350) | NON | NULL | ||
| le sexe | varchar (6) | OUI | NULL | ||
| date_de_naissance | données | OUI | NULL | ||
| adresse physique | varchar (255) | OUI | NULL | ||
| adresse postale | varchar (255) | OUI | NULL | ||
| numéro_de_contact | varchar (75) | OUI | NULL | ||
| en nous envoyant un mail | varchar (255) | OUI | NULL |
Le numéro de carte de crédit a disparu de la liste des champs.
TABLE DROP
La syntaxe pour supprimer une table entière d'une base de données est la suivante.
DROP TABLE `sample_table`;
Appliquée à un objet réel, cette affirmation se présente ainsi.
DROP TABLE `categories_archive`;
Son exécution supprime de la base de données la table nommée `categories_archive` et toutes les lignes qu'elle contient.
SUPPRIMER LA BASE DE DONNÉES
Le même mot-clé supprime un schéma entier. L'ajout de IF EXISTS supprime l'erreur qui MySQL Lève une exception lorsque la cible a déjà disparu, ce qui est utile dans les scripts qui s'exécutent plusieurs fois.
DROP DATABASE IF EXISTS `myflixdb_backup`;
La suppression d'un objet est définitive. Si l'objet lui-même doit être conservé et que seul son nom est incorrect, la commande RENAME est l'outil approprié.
Qu'est-ce que la commande RENAME dans MySQL?
La commande RENAME permet de modifier le nom d'un objet de base de données existant, tel qu'une table ou une colonne, en lui attribuant un nouveau nom. Renommer une table n'entraîne pas la perte des données qu'elle contient.
La commande possède la syntaxe de base suivante.
RENAME TABLE `current_table_name` TO `new_table_name`;
Pour renommer la table movierentals en movie_rentals, le script ci-dessous est utilisé.
RENAME TABLE `movierentals` TO `movie_rentals`;
Son exécution renomme la table `movierentals` en `movie_rentals`. Comme il ne s'agit que d'un changement d'étiquette, la même instruction, exécutée en sens inverse, rétablit le nom d'origine.
RENAME TABLE `movie_rentals` TO `movierentals`;
La commande RENAME TABLE permet de renommer une table. colonne, et modifier ce qu'il contient, c'est le rôle du mot-clé CHANGE.
MODIFIER le mot-clé
Le mot-clé CHANGE vous permet de
- Modifier le nom d'une colonne
- Modifier le type de données de la colonne
- Modifier les contraintes de colonne
Prenons un exemple. Le champ full_names de la table members est de type varchar et a une largeur de 350 caractères, comme le confirme le script ci-dessous.
SHOW COLUMNS FROM `members`;
| Champ | Type | Null | ACTIVITES | Réglage par défaut | Extra |
|---|---|---|---|---|---|
| numéro de membre | int (11) | NON | PRI | NULL | incrémentation automatique |
| noms complets | varchar (350) | NON | NULL | ||
| le sexe | varchar (6) | OUI | NULL | ||
| date_de_naissance | données | OUI | NULL | ||
| adresse physique | varchar (255) | OUI | NULL | ||
| adresse postale | varchar (255) | OUI | NULL | ||
| numéro_de_contact | varchar (75) | OUI | NULL | ||
| en nous envoyant un mail | varchar (255) | OUI | NULL |
Supposons que l'exigence soit de
- Modifiez le nom du champ de « full_names » à « fullname ».
- Modifiez-le en type de données char avec une largeur de 250.
- Ajouter une contrainte NOT NULL
Les trois modifications sont effectuées par une seule instruction CHANGE.
ALTER TABLE `members` CHANGE COLUMN `full_names` `fullname` char(250) NOT NULL;
L'exécution de cette commande sur myflixdb, puis l'exécution du script SHOW COLUMNS, donne le résultat suivant.
| Champ | Type | Null | ACTIVITES | Réglage par défaut | Extra |
|---|---|---|---|---|---|
| numéro de membre | int (11) | NON | PRI | NULL | incrémentation automatique |
| nom complet | char (250) | NON | NULL | ||
| le sexe | varchar (6) | OUI | NULL | ||
| date_de_naissance | données | OUI | NULL | ||
| adresse physique | varchar (255) | OUI | NULL | ||
| adresse postale | varchar (255) | OUI | NULL | ||
| numéro_de_contact | varchar (75) | OUI | NULL | ||
| en nous envoyant un mail | varchar (255) | OUI | NULL |
La colonne s'appelle désormais fullname, contient char(250) et rejette les valeurs NULL.
MODIFIER le mot-clé
Le mot-clé MODIFY vous permet de
- Modifier le type de données de la colonne
- Modifier les contraintes de colonne
Dans l'exemple CHANGE ci-dessus, le nom du champ a dû être fourni deux fois, même si le renommage ne constituait qu'une partie de l'objectif. Omettre le nom du champ dans une instruction CHANGE génère une erreur. Lorsque seuls le type de données et les contraintes doivent être ajustés et que le nom doit rester inchangé, la fonction MODIFY remplit cette fonction en une seule mention de la colonne.
Le script ci-dessous modifie la largeur du champ « nom complet » de 250 à 50.
ALTER TABLE `members` MODIFY `fullname` char(50) NOT NULL;
L'exécution de cette commande sur myflixdb, puis l'exécution du script SHOW COLUMNS, donne le résultat affiché ci-dessous.
| Champ | Type | Null | ACTIVITES | Réglage par défaut | Extra |
|---|---|---|---|---|---|
| numéro de membre | int (11) | NON | PRI | NULL | incrémentation automatique |
| nom complet | char (50) | NON | NULL | ||
| le sexe | varchar (6) | OUI | NULL | ||
| date_de_naissance | données | OUI | NULL | ||
| adresse physique | varchar (255) | OUI | NULL | ||
| adresse postale | varchar (255) | OUI | NULL | ||
| numéro_de_contact | varchar (75) | OUI | NULL | ||
| en nous envoyant un mail | varchar (255) | OUI | NULL |
⚠️ Attention : Réduire le nombre de caractères d'une colonne tronque les données qui ne tiennent plus. Tout nom de plus de 50 caractères est tronqué par cette instruction ; vérifiez donc la valeur la plus longue. SELECT requête avant de réduire un champ.
MODIFIER vs MODIFIER vs RENOMMER LA COLONNE
Ces trois mots-clés se recoupent, et choisir le mauvais est la source d'erreurs la plus fréquente dans ce domaine. Le tableau ci-dessous les compare.
| Mots-clés | Renomme la colonne | Modifie le type et les contraintes | Ancien nom requis | Utilisation typique |
|---|---|---|---|---|
| CHANGEMENT | Oui | Oui | Oui, et le nouveau nom | Renommer et redéfinir en une seule instruction |
| MODIFIER | Non | Oui | Nom donné une fois | Élargir, rétrécir ou retaper une colonne |
| RENOMMER LA COLONNE | Oui | Non | Oui, et le nouveau nom | Renommer uniquement, à partir de MySQL 8.0 à partir de maintenant |
MySQL La version 8.0 a ajouté une quatrième option pour le cas le plus simple : un renommage sans aucune redéfinition.
ALTER TABLE `members` RENAME COLUMN `fullname` TO `full_name`;
Le type et le nom sont définis. Reste à savoir où placer la nouvelle colonne dans le tableau ; c’est le mot-clé AFTER qui détermine cet emplacement.
APRÈS Mot-clé
Par défaut, une colonne ajoutée avec ALTER TABLE est placée à la fin de la table. Pour la placer à une position spécifique, la commande ALTER est combinée avec le mot-clé AFTER.
Le script ci-dessous ajoute « date_of_registration » directement après « date_of_birth » dans la table des membres.
ALTER TABLE `members` ADD `date_of_registration` date NULL AFTER `date_of_birth`;
L'exécution de cette commande sur myflixdb, puis l'exécution du script SHOW COLUMNS, donne le résultat affiché ci-dessous.
| Champ | Type | Null | ACTIVITES | Réglage par défaut | Extra |
|---|---|---|---|---|---|
| numéro de membre | int (11) | NON | PRI | NULL | incrémentation automatique |
| nom complet | char (50) | NON | NULL | ||
| le sexe | varchar (6) | OUI | NULL | ||
| date_de_naissance | données | OUI | NULL | ||
| date_d'enregistrement | données | OUI | NULL | ||
| adresse physique | varchar (255) | OUI | NULL | ||
| adresse postale | varchar (255) | OUI | NULL | ||
| numéro_de_contact | varchar (75) | OUI | NULL | ||
| en nous envoyant un mail | varchar (255) | OUI | NULL |
La ligne en surbrillance correspond à la colonne ajoutée après la date de naissance. Le mot-clé FIRST fonctionne de la même manière et place la nouvelle colonne en tête du tableau.
