Pular para o conteúdo

A primeira escola especializada em tecnologia do Alto Solimões, com corpo técnico formado na área.

Modulo 5: Estrutura e Manutencao

Alterando Tabelas

ALTER TABLE para modificar a estrutura

Quando alterar uma tabela?

Voce criou a tabela, ja tem dados nela, e agora percebe que precisa de uma coluna nova? Ou quer mudar o tipo de uma coluna? Nao precisa apagar e recriar a tabela: use ALTER TABLE para modificar a estrutura sem perder os dados existentes.

ADD COLUMN: Adicionar coluna

-- Adicionar uma coluna de email
ALTER TABLE alunos ADD COLUMN email VARCHAR(150);

A nova coluna e criada com NULL em todas as linhas existentes. Se voce quer que ela seja obrigatoria, pode definir um valor padrao:

-- Adicionar coluna com valor padrao
ALTER TABLE alunos ADD COLUMN ativo BOOLEAN DEFAULT true;

Voce tambem pode adicionar com NOT NULL, mas so se definir um DEFAULT (senao as linhas existentes nao teriam valor):

ALTER TABLE alunos ADD COLUMN status VARCHAR(20) NOT NULL DEFAULT 'ativo';

DROP COLUMN: Remover coluna

-- Remover a coluna telefone
ALTER TABLE alunos DROP COLUMN telefone;

RENAME COLUMN: Renomear coluna

-- Renomear de 'fone' para 'telefone'
ALTER TABLE alunos RENAME COLUMN fone TO telefone;

Renomear nao afeta os dados, apenas o nome da coluna. Mas cuidado: se alguma consulta ou aplicacao usa o nome antigo, vai quebrar.

ALTER COLUMN: Modificar tipo ou constraints

Mudar o tipo de dado

-- Mudar o tipo de VARCHAR(50) para VARCHAR(200)
ALTER TABLE alunos ALTER COLUMN nome TYPE VARCHAR(200);

Adicionar ou remover NOT NULL

-- Tornar a coluna obrigatoria
ALTER TABLE alunos ALTER COLUMN email SET NOT NULL;

-- Permitir NULL novamente
ALTER TABLE alunos ALTER COLUMN email DROP NOT NULL;

Alterar valor padrao

-- Definir um valor padrao
ALTER TABLE alunos ALTER COLUMN cidade SET DEFAULT 'Nao informada';

-- Remover o valor padrao
ALTER TABLE alunos ALTER COLUMN cidade DROP DEFAULT;

RENAME TABLE: Renomear tabela

ALTER TABLE alunos RENAME TO estudantes;

Varias alteracoes de uma vez

Voce pode combinar varias alteracoes em um unico comando:

ALTER TABLE alunos
ADD COLUMN email VARCHAR(150),
ADD COLUMN telefone VARCHAR(20),
DROP COLUMN endereco;

Exemplo pratico completo

Imagine que a tabela alunos foi criada assim:

CREATE TABLE alunos (
id SERIAL PRIMARY KEY,
nome VARCHAR(50),
cidade VARCHAR(50)
);

E agora voce precisa:

  1. Aumentar o tamanho do nome
  2. Adicionar email (obrigatorio)
  3. Adicionar data de nascimento
  4. Renomear cidade para cidade_natal
ALTER TABLE alunos
ALTER COLUMN nome TYPE VARCHAR(150),
ADD COLUMN email VARCHAR(150) NOT NULL DEFAULT '',
ADD COLUMN data_nascimento DATE,
RENAME COLUMN cidade TO cidade_natal;

E nos ORMs? Migrations!

Em projetos reais com ORMs, voce nao roda ALTER TABLE manualmente. Voce cria migrations: arquivos que descrevem a mudanca. O ORM gera o SQL automaticamente.

# Prisma: edite o schema.prisma e rode
npx prisma migrate dev --name adicionar_email

# Drizzle: gere a migration a partir do schema
npx drizzle-kit generate

# Lucid (AdonisJS): crie uma migration
node ace make:migration adicionar_email_alunos

A vantagem das migrations e que elas ficam no historico do projeto. Qualquer pessoa que baixar o codigo pode rodar as migrations e ter o banco identico.

Exercicios

  1. Adicione uma coluna cpf (VARCHAR 14, UNIQUE) na tabela alunos.
  2. Renomeie a coluna nome para nome_completo.
  3. Mude o tipo da coluna cidade de VARCHAR(50) para VARCHAR(100).
  4. Remova a coluna cpf que voce acabou de criar.
  5. Faca todas as alteracoes acima em um unico comando ALTER TABLE.

Referencias

Testa o que você leu

5 perguntas sobre esta aula. Errar aqui não custa nada - a explicação vem junto da correção.

Pergunta 1 de 5
Qual comando acrescenta uma coluna a uma tabela existente?