Modificando a Estrutura da Tabela
Nesta etapa, aprenderemos como modificar tabelas existentes usando comandos ALTER TABLE. Esta é uma tarefa comum quando seus requisitos de dados mudam ao longo do tempo.
Vamos modificar nossa tabela de produtos para adicionar algumas novas colunas e modificar as existentes:
- Adicionar uma nova coluna:
ALTER TABLE products
ADD COLUMN manufacturer VARCHAR(100) AFTER name;
Este comando adiciona uma nova coluna chamada manufacturer após a coluna name.
- Modificar uma coluna existente:
ALTER TABLE products
MODIFY COLUMN description VARCHAR(500) NOT NULL DEFAULT 'No description available';
Este comando altera a coluna description para uma string de comprimento variável com um comprimento máximo de 500 caracteres. Ele também define um valor padrão de 'No description available' para novas linhas.
- Renomear uma coluna:
ALTER TABLE products
CHANGE COLUMN weight product_weight DECIMAL(8,2);
Este comando renomeia a coluna weight para product_weight e altera seu tipo de dado para um número decimal com 8 dígitos no total e 2 casas decimais.
- Remover uma coluna:
ALTER TABLE products
DROP COLUMN in_stock;
Este comando remove a coluna in_stock da tabela.
Vamos adicionar um índice composto para melhorar o desempenho da consulta:
ALTER TABLE products
ADD INDEX idx_name_manufacturer (name, manufacturer);
Este comando cria um índice composto nas colunas name e manufacturer.
Para ver todas as alterações que fizemos:
DESCRIBE products;
SHOW INDEX FROM products;
Você deve ver a estrutura da tabela e os índices atualizados:
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)