Sérgio Lacerda

Desenvolvedor Backend .NET e educador em tecnologia
Escrevo sobre desenvolvimento de software, carreira em TI e negócios

MySQL na prática: Alterando tabelas com ALTER TABLE (DDL)

Por Sérgio Lacerda
Publicado em 19/07/2021 · Revisado em 11/01/2026

Neste artigo, você vai aprender na prática como alterar estruturas de tabelas no MySQL utilizando o comando ALTER TABLE, incluindo renomear, adicionar, modificar e remover colunas com DDL.

Hoje vamos explorar os comandos DDL (Data Definition Language – subconjunto da linguagem SQL) no MySQL, aprendendo como utilizá-los para manter e evoluir a estrutura de tabelas conforme necessário.

Para nossos exemplos, vamos criar e ampliar gradativamente uma única tabela, de forma a tornar o processo mais simples para o entendimento. Nossa tabela irá conter informações sobre pessoas e, inicialmente, vamos criá-la com apenas dois campos: "IdPessoa" (chave primária da tabela) e "Nome" (irá armazenar o nome da pessoa).


/* Criando o banco de dados */
CREATE DATABASE dbPessoa;
USE dbPessoa;

/* Criando a tabela de pessoas */
CREATE TABLE Pessoas (
    IdPessoa INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Nome VARCHAR(80) NOT NULL
);

+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| IdPessoa | int         | NO   | PRI | NULL    | auto_increment |
| Nome     | varchar(80) | NO   |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+

Imagine agora que eu tenha cometido um erro na instrução acima. Eu criei o campo "Nome", quando, na verdade, eu queria que se chamasse "NomePessoa". Como é preciso alterar a estrutura da tabela, vamos utilizar uma instrução ALTER TABLE (alterar tabela) com uma cláusula CHANGE COLUMN (mudar coluna), conforme o exemplo abaixo:


/* Renomeando uma coluna que já existe */
ALTER TABLE Pessoas 
CHANGE COLUMN Nome NomePessoa VARCHAR(80) NOT NULL;

+------------+-------------+------+-----+---------+----------------+
| Field      | Type        | Null | Key | Default | Extra          |
+------------+-------------+------+-----+---------+----------------+
| IdPessoa   | int         | NO   | PRI | NULL    | auto_increment |
| NomePessoa | varchar(80) | NO   |     | NULL    |                |
+------------+-------------+------+-----+---------+----------------+

Ao executar o comando acima, estamos alterando o nome da coluna "Nome" para "NomePessoa". Note que foi mantido o mesmo tipo VARCHAR(80) NOT NULL, ou seja, o campo continua sendo texto de no máximo 80 caracteres, e não aceita nulo. Se quiséssemos, poderíamos mudar isso também, mas vamos ver isso um pouco mais adiante.

Se surgir um novo requisito, por exemplo, precisaremos adicionar uma coluna para armazenar a idade de cada pessoa. Novamente vamos utilizar o ALTER TABLE, mas agora adicionando uma coluna (ADD COLUMN), que será chamada de "Idade".


/* Adicionando uma nova coluna */
ALTER TABLE Pessoas 
ADD COLUMN Idade VARCHAR(3) NOT NULL;

+------------+-------------+------+-----+---------+----------------+
| Field      | Type        | Null | Key | Default | Extra          |
+------------+-------------+------+-----+---------+----------------+
| IdPessoa   | int         | NO   | PRI | NULL    | auto_increment |
| NomePessoa | varchar(80) | NO   |     | NULL    |                |
| Idade      | varchar(3)  | NO   |     | 0       |                |
+------------+-------------+------+-----+---------+----------------+

Executamos o comando e criamos com sucesso o campo "Idade", mas você deve ter percebido que eu cometi um novo erro: a idade, uma informação, por padrão, numérica, foi criada como sendo um texto - VARCHAR(3). Dessa forma, temos agora que corrigir essa falha e mudar o tipo desse campo (MODIFY COLUMN):


/* Alterando o tipo de dado de uma coluna que já existe */
ALTER TABLE Pessoas 
MODIFY COLUMN Idade INT UNSIGNED NOT NULL;

+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| IdPessoa   | int          | NO   | PRI | NULL    | auto_increment |
| NomePessoa | varchar(80)  | NO   |     | NULL    |                |
| Idade      | int unsigned | NO   |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+

Agora, nossa coluna "Idade" armazena números inteiros.

Você deve ter percebido que a coluna "Idade" foi adicionada por padrão como a última da tabela, mas às vezes precisamos inseri-la em uma posição específica.

Para exemplificar essa situação, vamos inserir uma nova coluna chamada "DataNascimento", posicionando-a entre as colunas "NomePessoa" e "Idade". Vamos usar novamente a cláusula ADD COLUMN, mas agora com AFTER NomePessoa (o novo campo será inserido após a coluna "NomePessoa").


/* Adicionando uma nova coluna em uma posição específica na tabela (Depois do campo "NomePessoa") */
ALTER TABLE Pessoas 
ADD COLUMN DataNascimento DATE NOT NULL AFTER NomePessoa;

+----------------+--------------+------+-----+---------+----------------+
| Field          | Type         | Null | Key | Default | Extra          |
+----------------+--------------+------+-----+---------+----------------+
| IdPessoa       | int          | NO   | PRI | NULL    | auto_increment |
| NomePessoa     | varchar(80)  | NO   |     | NULL    |                |
| DataNascimento | date         | NO   |     | NULL    |                |
| Idade          | int unsigned | NO   |     | NULL    |                |
+----------------+--------------+------+-----+---------+----------------+

Note que "DataNascimento" foi criada e inserida após a coluna "NomePessoa", ocupando exatamente a posição que desejávamos.

Se, por algum motivo, precisarmos alterar a posição desse campo, podemos movê-lo fazendo uso do MODIFY COLUMN, como no exemplo abaixo, onde estamos reposicionando o campo "DataNascimento" para depois da coluna "Idade".


/* Alterando a posição de uma coluna (Colocando depois do campo "Idade") */
ALTER TABLE Pessoas 
MODIFY COLUMN DataNascimento DATE NOT NULL AFTER Idade;

+----------------+--------------+------+-----+---------+----------------+
| Field          | Type         | Null | Key | Default | Extra          |
+----------------+--------------+------+-----+---------+----------------+
| IdPessoa       | int          | NO   | PRI | NULL    | auto_increment |
| NomePessoa     | varchar(80)  | NO   |     | NULL    |                |
| Idade          | int unsigned | NO   |     | NULL    |                |
| DataNascimento | date         | NO   |     | NULL    |                |
+----------------+--------------+------+-----+---------+----------------+

Analisando agora a nova estrutura, percebemos que talvez não faça mais sentido manter o campo "Idade", uma vez que podemos obter essa informação através de um simples cálculo a partir da coluna "DataNascimento". Logo, vamos excluir (DROP COLUMN) essa coluna da nossa tabela de pessoas.


/* Excluindo uma coluna da tabela */
ALTER TABLE Pessoas 
DROP COLUMN Idade;

+----------------+-------------+------+-----+---------+----------------+
| Field          | Type        | Null | Key | Default | Extra          |
+----------------+-------------+------+-----+---------+----------------+
| IdPessoa       | int         | NO   | PRI | NULL    | auto_increment |
| NomePessoa     | varchar(80) | NO   |     | NULL    |                |
| DataNascimento | date        | NO   |     | NULL    |                |
+----------------+-------------+------+-----+---------+----------------+

Com isso, finalizamos este pequeno tour pelos comandos DDL. É claro que não exploramos todas as possibilidades, mas passamos por boa parte das operações de alteração em tabelas usando ALTER TABLE, que você pode vir a precisar no seu dia a dia como dev.

Espero que tenha gostado desse artigo e que ele tenha sido útil para você. Siga-me nas redes sociais para mais conteúdos como esse!

Voltar para textos