Modification de la structure de table
Dans cette étape, nous apprendrons à modifier les tables existantes en utilisant les commandes ALTER TABLE. C'est une tâche courante lorsque vos besoins en matière de données évoluent avec le temps.
Modifions notre table products
pour ajouter de nouvelles colonnes et modifier celles existantes :
- Ajouter une nouvelle colonne :
ALTER TABLE products
ADD COLUMN manufacturer VARCHAR(100) AFTER name;
Cette commande ajoute une nouvelle colonne nommée manufacturer
après la colonne name
.
- Modifier une colonne existante :
ALTER TABLE products
MODIFY COLUMN description VARCHAR(500) NOT NULL DEFAULT 'No description available';
Cette commande change la colonne description
en une chaîne de caractères de longueur variable avec une longueur maximale de 500 caractères. Elle définit également une valeur par défaut de 'No description available' pour les nouvelles lignes.
- Renommer une colonne :
ALTER TABLE products
CHANGE COLUMN weight product_weight DECIMAL(8,2);
Cette commande renomme la colonne weight
en product_weight
et change son type de données en un nombre décimal avec 8 chiffres au total et 2 décimales.
- Supprimer une colonne :
ALTER TABLE products
DROP COLUMN in_stock;
Cette commande supprime la colonne in_stock
de la table.
Ajoutons un index composite pour améliorer les performances des requêtes :
ALTER TABLE products
ADD INDEX idx_name_manufacturer (name, manufacturer);
Cette commande crée un index composite sur les colonnes name
et manufacturer
.
Pour voir toutes les modifications que nous avons apportées :
DESCRIBE products;
SHOW INDEX FROM products;
Vous devriez voir la structure mise à jour de la table et les index :
MariaDB [store]> DESCRIBE products;
+----------------+---------------+------+-----+--------------------------+-------------------------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+---------------+------+-----+--------------------------+-------------------------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(100) | NO | MUL | NULL | |
| manufacturer | varchar(100) | YES | | NULL | |
| price | decimal(10,2) | NO | | NULL | |
| description | varchar(500) | NO | | No description available | |
| product_weight | decimal(8,2) | YES | | NULL | |
| created_at | datetime | YES | | current_timestamp() | |
| last_updated | timestamp | NO | | current_timestamp() | on update current_timestamp() |
+----------------+---------------+------+-----+--------------------------+-------------------------------+
8 rows in set (0.001 sec)
MariaDB [store]> SHOW INDEX FROM products;
+----------+------------+-----------------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Ignored |
+----------+------------+-----------------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
| products | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | | NO |
| products | 1 | idx_name_manufacturer | 1 | name | A | 0 | NULL | NULL | | BTREE | | | NO |
| products | 1 | idx_name_manufacturer | 2 | manufacturer | A | 0 | NULL | NULL | YES | BTREE | | | NO |
+----------+------------+-----------------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
3 rows in set (0.000 sec)