MySQL: O Guia Completo para Modificar Estruturas de Tabelas…
Última atualização: 2026-08-26
As estruturas das tabelas não são imutáveis — quando as necessidades da empresa mudam, o ALTER TABLE é a sua salvação.
Esta aula apresenta uma explicação sistemática de todas as operações para modificar estruturas de tabelas.
graph TB
A[ALTER TABLE Operation] --> B[ADD COLUMN<br/>Add Field]
A --> C[DROP COLUMN<br/>Delete Field]
A --> D[MODIFY<br/>Modification Type/Constraints]
A --> E[CHANGE<br/>Rename Field]
A --> F[RENAME<br/>Modify Table Name]
A --> G[AUTO_INCREMENT<br/>Auto-increment Settings]
A --> H[ADD/DROP CONSTRAINT<br/>Constraint Management]
1. O que você vai aprender
- ALTER TABLE: Adicionar, excluir ou modificar colunas
- Modificar nomes de tabelas e colunas
- Modificar tipos de campos e restrições
- Configurações de AUTO_INCREMENT
- DEFAULT Gerenciamento de valores padrão
2. Uma história real sobre uma mudança nos requisitos
(1) Desafio: Necessidades em constante mudança
O gerente de produto disse:
“Adicione um campo ‘número de celular’ à tabela de usuários e altere o comprimento do nome de usuário de 50 para 100.”
Se você não souber como usar ALTER TABLE, sua única opção é excluir a tabela e recriá-la — o que resultará na perda de todos os dados.
(2) Soluções para ALTER TABLE
-- Add a mobile phone number field
ALTER TABLE users ADD COLUMN phone VARCHAR(20);
-- Change the username length
ALTER TABLE users MODIFY COLUMN username VARCHAR(100) NOT NULL;
Vantagens: Sem perda de dados, concluído em segundos.
3. Adicionar um campo
▶ Exemplo: ADICIONAR COLUNA
-- Add a Single Field
ALTER TABLE users ADD COLUMN phone VARCHAR(20);
-- Add a field and specify its position
ALTER TABLE users ADD COLUMN avatar VARCHAR(255) AFTER username;
-- Add to the beginning of the table
ALTER TABLE users ADD COLUMN uuid CHAR(36) FIRST;
-- Add Multiple Fields
ALTER TABLE users
ADD COLUMN address VARCHAR(200),
ADD COLUMN city VARCHAR(50),
ADD COLUMN country VARCHAR(50) DEFAULT 'China';
Saída:
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
4. Exclusão de campos
▶ Exemplo: DROP COLUMN
-- Delete a Single Field
ALTER TABLE users DROP COLUMN phone;
-- Delete Multiple Fields
ALTER TABLE users DROP COLUMN address, DROP COLUMN city;
5. Modificar campos
(1) MODIFICAR vs ALTERAR
| Comando | Conteúdo editável | Sintaxe |
|---|---|---|
| MODIFICAR | Tipo, Restrição, Localização | MODIFY column new_type [constraints] |
| ALTERAR | Nome, Tipo, Restrições | CHANGE old_name new_name new_type [constraints] |
▶ Exemplo: MODIFY — Modificando um tipo
-- Modify Field Type
ALTER TABLE users MODIFY COLUMN username VARCHAR(100) NOT NULL;
-- Change the field type and move it to the specified location
ALTER TABLE users MODIFY COLUMN email VARCHAR(150) FIRST;
-- Modify Field Default Values
ALTER TABLE users MODIFY COLUMN status VARCHAR(20) DEFAULT 'active';
▶ Exemplo: CHANGE — Renomeação de um campo
-- Rename Field
ALTER TABLE users CHANGE COLUMN username user_name VARCHAR(100) NOT NULL;
-- Rename and Change Type
ALTER TABLE users CHANGE COLUMN phone mobile VARCHAR(30);
6. Renomeando uma tabela
▶ Exemplo: RENAME
-- Method 1: RENAME TO
ALTER TABLE users RENAME TO customers;
-- Method 2: RENAME TABLE
RENAME TABLE users TO customers;
-- Rename Multiple Tables at Once
RENAME TABLE
old_users TO users,
old_orders TO orders;
7. Configurações do AUTO_INCREMENT
▶ Exemplo: Configuração do autoincremento
-- Create a table with an auto-increment column
CREATE TABLE products (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100)
);
-- Insert Data (id auto-generated)
INSERT INTO products (name) VALUES ('iPhone');
INSERT INTO products (name) VALUES ('MacBook');
-- View Current Accumulated Value
SHOW CREATE TABLE products\G
-- Modify the Auto-Increment Start Value
ALTER TABLE products AUTO_INCREMENT = 1000;
-- Insert New Data (id starts from 1000)
INSERT INTO products (name) VALUES ('iPad');
Saída:
+----+---------+
| id | name |
+----+---------+
| 1 | iPhone |
| 2 | MacBook |
| 1000| iPad |
+----+---------+
8. Gerenciamento de valores PADRÃO
▶ Exemplo: Alteração do valor padrão
-- Add a default value
ALTER TABLE users ALTER COLUMN status SET DEFAULT 'active';
-- Delete the default value
ALTER TABLE users ALTER COLUMN status DROP DEFAULT;
-- Edit the default value for created_at
ALTER TABLE orders ALTER COLUMN order_date SET DEFAULT (CURRENT_DATE);
9. Adicionar/remover restrições
▶ Exemplo: Gerenciamento de restrições
-- Add a Primary Key
ALTER TABLE users ADD PRIMARY KEY (id);
-- Delete Primary Key
ALTER TABLE users DROP PRIMARY KEY;
-- Add a unique constraint
ALTER TABLE users ADD UNIQUE (email);
-- Delete the unique constraint
ALTER TABLE users DROP INDEX email;
-- Add a Foreign Key
ALTER TABLE orders
ADD CONSTRAINT fk_customer
FOREIGN KEY (customer_id) REFERENCES customers(id);
-- Delete Foreign Key
ALTER TABLE orders DROP FOREIGN KEY fk_customer;
-- Add CHECK Constraints
ALTER TABLE employees ADD CONSTRAINT chk_age CHECK (age >= 18);
-- Delete CHECK Constraints
ALTER TABLE employees DROP CHECK chk_age;
10. Guia prático para edição em lote
▶ Exemplo: Como aplicar várias alterações de uma só vez
ALTER TABLE users
ADD COLUMN phone VARCHAR(20) AFTER email,
ADD COLUMN avatar VARCHAR(255),
MODIFY COLUMN username VARCHAR(150) NOT NULL,
DROP COLUMN temp_field,
ADD UNIQUE (phone);
❓ Perguntas Frequentes
P: O comando
ALTER TABLEbloqueia a tabela? R: No MySQL 8.0, a maioria das operaçõesALTER TABLEsuporta DDL online e não bloqueia a tabela. No entanto, operações como a modificação da chave primária ou dos tipos de coluna podem bloquear a tabela.
P: A modificação de um campo resultará em perda de dados? R: Ao usar MODIFY ou CHANGE para alterar o tipo de dados de uma coluna, se o novo tipo de dados não puder armazenar os dados originais, os dados serão truncados ou será retornado um erro. Renomear uma coluna não resulta em perda de dados.
P: É possível reverter uma instrução ALTER TABLE? R: Não. ALTER TABLE é uma operação DDL que é automaticamente confirmada após a execução e não pode ser revertida. Recomenda-se fazer um backup dos dados antes de realizar essa operação.
P: Como faço para modificar uma tabela que é muito grande? R: Uma operação
ALTER TABLEem uma tabela grande (dezenas de milhões de linhas) pode ser muito lenta. Recomendamos o uso de ferramentas como pt-online-schema-change ou gh-ost para modificar a tabela online.
📖 Resumo
- ADICIONAR COLUNA Adicione um campo; você pode especificar sua posição (PRIMEIRO/DEPOIS)
- DROP COLUMN Exclui uma coluna; os dados são perdidos permanentemente.
- MODIFY altera o tipo do campo e as restrições; CHANGE permite também renomear o campo
- RENAME TABLE Renomear uma tabela
- AUTO_INCREMENT Controla o valor inicial para o autoincremento
- ALTER COLUMN SET/DROP DEFAULT Gerenciar valores padrão
- RESTRIÇÃO DE ADIÇÃO/EXCLUSÃO Gerenciar restrições de chave primária, chave estrangeira, exclusividade e CHECK
📝 Exercícios
-
Questão básica (Dificuldade ⭐): Adicione o campo
phone(VARCHAR(20)) à tabelausers, colocando-o após o campoemail. -
Exercício avançado (Dificuldade ⭐⭐): Após criar a tabela
orders, altere o tipo de dados do campoamountde INT para DECIMAL(10,2) e adicione o campostatuscom o valor padrão 'pending'. -
Questão de desafio (Dificuldade: ⭐⭐⭐): Elabore um plano de evolução da estrutura da tabela: para passar da v1 para a v2, é necessário adicionar 3 colunas, excluir 1 coluna e alterar os tipos de dados de 2 colunas. Escreva as instruções
ALTER TABLEcompletas.