Modificación de la estructura de la tabla
En este paso, aprenderemos cómo modificar tablas existentes utilizando comandos ALTER TABLE. Esta es una tarea común cuando los requisitos de tus datos cambian con el tiempo.
Modifiquemos nuestra tabla products para agregar algunas columnas nuevas y modificar las existentes:
- Agregar una nueva columna:
ALTER TABLE products
ADD COLUMN manufacturer VARCHAR(100) AFTER name;
Este comando agrega una nueva columna llamada manufacturer
después de la columna name
.
- Modificar una columna existente:
ALTER TABLE products
MODIFY COLUMN description VARCHAR(500) NOT NULL DEFAULT 'No description available';
Este comando cambia la columna description
a una cadena de longitud variable con una longitud máxima de 500 caracteres. También establece un valor predeterminado de 'No description available' para las nuevas filas.
- Renombrar una columna:
ALTER TABLE products
CHANGE COLUMN weight product_weight DECIMAL(8,2);
Este comando renombra la columna weight
a product_weight
y cambia su tipo de dato a un número decimal con 8 dígitos en total y 2 decimales.
- Eliminar una columna:
ALTER TABLE products
DROP COLUMN in_stock;
Este comando elimina la columna in_stock
de la tabla.
Agreguemos un índice compuesto para mejorar el rendimiento de las consultas:
ALTER TABLE products
ADD INDEX idx_name_manufacturer (name, manufacturer);
Este comando crea un índice compuesto en las columnas name
y manufacturer
.
Para ver todos los cambios que hemos realizado:
DESCRIBE products;
SHOW INDEX FROM products;
Deberías ver la estructura de la tabla actualizada y los índices:
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)