Commande ALTER MySQL
Lorsque nous devons modifier le nom d'une table ou les champs d'une table, nous devons utiliser la commande MySQLALTER.
La commande MySQLALTERest utilisée pour modifier la structure d'objets tels que les bases de données, les tables et les index.
ALTERLa commande permet d'ajouter, de modifier ou de supprimer des objets de base de données, et peut être utilisée pour des opérations telles que la modification des définitions de colonnes de table, l'ajout de contraintes, et la création et la suppression d'index.
La commande ALTER est très puissante et peut modifier et ajuster de manière flexible lorsque la structure de la base de données change.
Voici lesALTERutilisations courantes et exemples de la commande :
1. Ajouter une colonne
ALTER TABLE table_name ADD COLUMN new_column_name datatype;
L'instruction SQL suivante ajoute une colonne de type date nommée birth_date à la table employees :
Exemple
ADD COLUMN birth_date DATE;
2. Modifier le type de données d'une colonne
Exemple
MODIFY COLUMN column_name new_datatype;
L'instruction SQL suivante modifie le type de données de la colonne salary dans la table employees en DECIMAL(10,2) :
Exemple
MODIFY COLUMN salary DECIMAL(10,2);
3. Modifier le nom de colonne
ALTER TABLE table_name CHANGE COLUMN old_column_name new_column_name datatype;
L'instruction SQL suivante remplace le nom d'une colonne dans la table employees de old_column_name par new_column_name, et peut également modifier le type de données en même temps :
Exemple
CHANGE COLUMN old_column_name new_column_name VARCHAR(255);
4. Supprimer une colonne
ALTER TABLE table_name DROP COLUMN column_name;
L'instruction SQL suivante supprime la colonne birth_date de la table employees :
Exemple
DROP COLUMN birth_date;
5. Ajouter une PRIMARY KEY
ALTER TABLE table_name ADD PRIMARY KEY (column_name);
L'instruction SQL suivante ajoute une PRIMARY KEY à la table employees :
Exemple
ADD PRIMARY KEY (employee_id);
6. Ajouter une FOREIGN KEY
ALTER TABLE child_table ADD CONSTRAINT fk_name FOREIGN KEY (column_name) REFERENCES parent_table (column_name);
L'instruction SQL suivante ajoute une FOREIGN KEY à la table orders, en référençant la colonne customer_id de la table customers :
Exemple
ADD CONSTRAINT fk_customer
FOREIGN KEY (customer_id)
REFERENCES customers (customer_id);
7. Modifier le nom de la table
ALTER TABLE old_table_name RENAME TO new_table_name;
L'instruction SQL suivante change le nom de la table de employees en staff :
Exemple
RENAME TO staff;
Remarque :
Mais lorsque vous utilisez la commandeALTER, vous devez être extrêmement prudent, car certaines opérations peuvent nécessiter la reconstruction de tables ou d'index, ce qui peut affecter les performances et le temps d'exécution de la base de données.
Lorsque vous effectuez des modifications structurelles importantes, il est recommandé de sauvegarder d'abord les données et d'agir avec prudence dans l'environnement de production.
Exemple
Avant de commencer le tutoriel de ce chapitre, créons d'abord une table nommée :testalter_tbl。
Exemple
Entrez le mot de passe :*******
mysql> USE EXAMPLE;
DATABASE modifiée
mysql> CREATE TABLE testalter_tbl
-> (
-> i INT,
-> c CHAR(1)
-> );
Requête OK, 0 LIGNES affectées (0.05 sec)
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| CHAMP | TYPE | NULL | CLÉ | DÉFAUT | Extra |
+-------+---------+------+-----+---------+-------+
| i | INT(11) | OUI | | NULL | |
| c | CHAR(1) | OUI | | NULL | |
+-------+---------+------+-----+---------+-------+
2 LIGNES DANS L'ENSEMBLE (0.00 sec)
Supprimer, ajouter ou modifier les champs de table
La commande suivante utilise la commande ALTER et la clause DROP pour supprimer le champ i de la table créée ci-dessus :
mysql> ALTER TABLE testalter_tbl DROP i;
S'il ne reste qu'un seul champ dans la table de données, DROP ne peut pas être utilisé pour supprimer le champ.
Dans MySQL, utilisez la clause ADD pour ajouter une colonne à une table de données. L'exemple suivant ajoute un champ i à la table testalter_tbl et définit le type de données :
mysql> ALTER TABLE testalter_tbl ADD i INT;
Après l'exécution de la commande ci-dessus, le champ i sera automatiquement ajouté à la fin des champs de la table de données.
mysql> SHOW COLUMNS FROM testalter_tbl; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | c | char(1) | YES | | NULL | | | i | int(11) | YES | | NULL | | +-------+---------+------+-----+---------+-------+ 2 rows in set (0.00 sec)
Si vous devez spécifier la position du nouveau champ, vous pouvez utiliser les mots-clés fournis par MySQL : FIRST (pour le définir comme première colonne), AFTER nom du champ (pour le placer après un certain champ).
Essayez l'instruction ALTER TABLE suivante. Après une exécution réussie, utilisez SHOW COLUMNS pour afficher les changements dans la structure de la table :
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 mots-clés FIRST et AFTER peuvent être utilisés avec les clauses ADD et MODIFY, donc si vous voulez réinitialiser la position d'un champ d'une table de données, vous devez d'abord utiliser DROP pour supprimer le champ, puis utiliser ADD pour ajouter le champ et définir sa position.
Modifier le type et le nom d'un champ
Si vous devez modifier le type et le nom d'un champ, vous pouvez utiliser la clause MODIFY ou CHANGE dans la commande ALTER.
Par exemple, pour changer le type du champ c de CHAR(1) à CHAR(10), vous pouvez exécuter la commande suivante :
mysql> ALTER TABLE testalter_tbl MODIFY c CHAR(10);
L'utilisation de la clause CHANGE a une syntaxe assez différente. Après le mot-clé CHANGE, le nom du champ que vous voulez modifier vient immédiatement, puis spécifiez le nouveau nom et le nouveau type du champ. Essayez l'exemple suivant :
mysql> ALTER TABLE testalter_tbl CHANGE i j BIGINT;
mysql> ALTER TABLE testalter_tbl CHANGE j j INT;
L'impact de ALTER TABLE sur les valeurs NULL et les valeurs par défaut
Lorsque vous modifiez un champ, vous pouvez spécifier s'il contient une valeur ou s'il faut définir une valeur par défaut.
L'exemple suivant spécifie le champ j comme NOT NULL avec une valeur par défaut de 100.
mysql> ALTER TABLE testalter_tbl
-> MODIFY j BIGINT NOT NULL DEFAULT 100;
Si vous ne définissez pas de valeur par défaut, MySQL mettra automatiquement la valeur par défaut du champ à NULL.
Modifier la valeur par défaut d'un champ
Vous pouvez utiliser ALTER pour modifier la valeur par défaut d'un champ. Essayez l'exemple suivant :
mysql> ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000; mysql> SHOW COLUMNS FROM testalter_tbl; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | c | char(1) | YES | | NULL | | | i | int(11) | YES | | 1000 | | +-------+---------+------+-----+---------+-------+ 2 rows in set (0.00 sec)
Vous pouvez également utiliser la commande ALTER avec la clause DROP pour supprimer la valeur par défaut d'un champ, comme dans l'exemple suivant :
mysql> ALTER TABLE testalter_tbl ALTER i DROP DEFAULT; mysql> SHOW COLUMNS FROM testalter_tbl; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | c | char(1) | YES | | NULL | | | i | int(11) | YES | | NULL | | +-------+---------+------+-----+---------+-------+ 2 rows in set (0.00 sec) Changing a Table Type:
Pour modifier le type de la table de données, vous pouvez utiliser la commande ALTER avec la clause TYPE. Essayez l'exemple suivant, dans lequel nous changeons le type de la table testalter_tbl en MYISAM :
Remarque :Pour afficher le type de la table de données, vous pouvez utiliser l'instruction SHOW TABLE STATUS.
mysql> ALTER TABLE testalter_tbl ENGINE = MYISAM;
mysql> SHOW TABLE STATUS LIKE 'testalter_tbl'\G
*************************** 1. row ****************
Name: testalter_tbl
Type: MyISAM
Row_format: Fixed
Rows: 0
Avg_row_length: 0
Data_length: 0
Max_data_length: 25769803775
Index_length: 1024
Data_free: 0
Auto_increment: NULL
Create_time: 2007-06-03 08:04:36
Update_time: 2007-06-03 08:04:36
Check_time: NULL
Create_options:
Comment:
1 row in set (0.00 sec)
Modifier le nom de la table
Si vous devez modifier le nom d'une table de données, vous pouvez utiliser la clause RENAME dans l'instruction ALTER TABLE.
Essayez l'exemple suivant pour renommer la table de données testalter_tbl en alter_tbl :
mysql> ALTER TABLE testalter_tbl RENAME TO alter_tbl;
La commande ALTER peut également être utilisée pour créer et supprimer des index sur les tables de données MySQL. Nous présenterons cette fonctionnalité dans les chapitres suivants.
Autres extensions