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.

100%
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


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

SQL
-- 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

SQL
-- 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';
▶ Experimente

Saída:

TEXT 📖 Somente leitura
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

4. Exclusão de campos

▶ Exemplo: DROP COLUMN

SQL
-- Delete a Single Field
ALTER TABLE users DROP COLUMN phone;

-- Delete Multiple Fields
ALTER TABLE users DROP COLUMN address, DROP COLUMN city;
▶ Experimente
⚠️ Observação: A exclusão de um campo excluirá permanentemente os dados dessa coluna, e eles não poderão ser recuperados!


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

SQL
-- 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';
▶ Experimente

▶ Exemplo: CHANGE — Renomeação de um campo

SQL
-- 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);
▶ Experimente

6. Renomeando uma tabela

▶ Exemplo: RENAME

SQL
-- 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;
▶ Experimente

7. Configurações do AUTO_INCREMENT

▶ Exemplo: Configuração do autoincremento

SQL
-- 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');
▶ Experimente

Saída:

TEXT 📖 Somente leitura
+----+---------+
| id | name    |
+----+---------+
|  1 | iPhone  |
|  2 | MacBook |
| 1000| iPad   |
+----+---------+

8. Gerenciamento de valores PADRÃO

▶ Exemplo: Alteração do valor padrão

SQL
-- 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);
▶ Experimente

9. Adicionar/remover restrições

▶ Exemplo: Gerenciamento de restrições

SQL
-- 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;
▶ Experimente

10. Guia prático para edição em lote

▶ Exemplo: Como aplicar várias alterações de uma só vez

SQL
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);
▶ Experimente

❓ Perguntas Frequentes

P: O comando ALTER TABLE bloqueia a tabela? R: No MySQL 8.0, a maioria das operações ALTER TABLE suporta 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 TABLE em 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


📝 Exercícios

  1. Questão básica (Dificuldade ⭐): Adicione o campo phone (VARCHAR(20)) à tabela users, colocando-o após o campo email.

  2. Exercício avançado (Dificuldade ⭐⭐): Após criar a tabela orders, altere o tipo de dados do campo amount de INT para DECIMAL(10,2) e adicione o campo status com o valor padrão 'pending'.

  3. 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 TABLE completas.

Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%