Adicionar uma coluna a uma tabela existente em SQL é uma tarefa comum que você vai precisar fazer à medida que o schema do seu banco de dados evolui. O comando ALTER TABLE permite modificar a estrutura de uma tabela existente sem perder dados. Este guia mostra como usar o ALTER TABLE para adicionar colunas, com exemplos práticos.
Entendendo o ALTER TABLE
O comando ALTER TABLE é usado para adicionar, excluir ou modificar colunas em uma tabela existente. Ele também pode ser usado para alterar as constraints da tabela. Este tutorial foca especificamente na adição de novas colunas.
Ao adicionar uma nova coluna, você deve especificar o nome da coluna, o tipo de dado e quaisquer constraints ou valores padrão adicionais. A operação é atômica e não afeta os dados existentes.
Sintaxe básica para adicionar uma coluna
Esta é a sintaxe básica para adicionar uma nova coluna a uma tabela:
ALTER TABLE table_name
ADD column_name column_type [constraint];
- table_name: o nome da tabela à qual você está adicionando a coluna.
- column_name: o nome da nova coluna.
-
column_type: o tipo de dado da nova coluna (por exemplo,
VARCHAR,INT,DATEetc.). -
constraint: opcional. Qualquer constraint adicional, como
NOT NULL,UNIQUEou valoresDEFAULT.
Exemplo: adicionando uma coluna
Vamos começar com uma tabela employees simples:
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(100),
position VARCHAR(50)
);
-- Current data in employees table:
INSERT INTO employees (id, name, position) VALUES (1, 'Alice', 'Engineer');
INSERT INTO employees (id, name, position) VALUES (2, 'Bob', 'Manager');
SELECT * FROM employees;
Saída:
+----+-------+----------+
| id | name | position |
+----+-------+----------+
| 1 | Alice | Engineer |
| 2 | Bob | Manager |
+----+-------+----------+
Adicionando uma nova coluna para o salário
Vamos adicionar uma nova coluna chamada salary com o tipo de dado DECIMAL(10, 2), que pode armazenar números com até 10 dígitos, incluindo 2 casas decimais:
ALTER TABLE employees
ADD salary DECIMAL(10, 2);
Este comando modifica a tabela employees para incluir a nova coluna salary. As linhas existentes terão valores NULL nessa coluna até que você as atualize.
Verificando a estrutura da tabela
Verifique se a coluna foi adicionada usando DESCRIBE ou SHOW COLUMNS (dependendo do seu sistema de banco de dados):
DESCRIBE employees;
Saída:
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
| name | varchar(100)| YES | | NULL | |
| position | varchar(50) | YES | | NULL | |
| salary | decimal(10,2)| YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
Adicionando uma coluna com valor padrão
Você também pode adicionar uma coluna com um valor padrão. Veja como adicionar uma coluna hire_date cujo padrão é a data atual:
ALTER TABLE employees
ADD hire_date DATE DEFAULT CURRENT_DATE;
Novas linhas inseridas na tabela employees terão automaticamente hire_date definida como a data atual quando nenhum valor for informado.
Adicionando uma coluna com a constraint NOT NULL
Adicionar uma coluna com a constraint NOT NULL a uma tabela existente exige cuidados especiais. Você não pode simplesmente adicionar uma coluna NOT NULL a uma tabela que já contém dados sem fornecer um valor padrão, pois isso violaria a constraint nas linhas existentes.
O problema do NOT NULL com dados existentes
Este comando vai falhar se a tabela já tiver linhas:
-- This will fail on tables with existing data
ALTER TABLE employees
ADD phone_number VARCHAR(20) NOT NULL;
O erro ocorre porque as linhas existentes teriam valores NULL na nova coluna, violando a constraint NOT NULL.
Solução 1: adicionar a coluna com valor padrão
A solução mais direta é fornecer um valor padrão:
ALTER TABLE employees
ADD phone_number VARCHAR(20) NOT NULL DEFAULT 'Unknown';
Isso funciona porque:
- A coluna é adicionada com o valor padrão em todas as linhas existentes
- A constraint
NOT NULLé satisfeita imediatamente - Inserções futuras devem fornecer um valor ou usar o padrão
Solução 2: processo em várias etapas
Para ter mais controle sobre os valores, use uma abordagem em várias etapas:
-- Step 1: Add the column as nullable
ALTER TABLE employees
ADD phone_number VARCHAR(20);
-- Step 2: Update existing rows with appropriate values
UPDATE employees
SET phone_number = 'Unknown'
WHERE phone_number IS NULL;
-- Step 3: Add the NOT NULL constraint
ALTER TABLE employees
ALTER COLUMN phone_number SET NOT NULL;
Observação: a sintaxe da etapa 3 varia conforme o sistema de banco de dados:
-
PostgreSQL:
ALTER COLUMN phone_number SET NOT NULL -
MySQL:
MODIFY COLUMN phone_number VARCHAR(20) NOT NULL -
SQL Server:
ALTER COLUMN phone_number VARCHAR(20) NOT NULL
Solução 3: valores padrão condicionais
Você pode definir valores padrão diferentes com base nos dados existentes:
-- Add column with temporary default
ALTER TABLE employees
ADD department VARCHAR(50) NOT NULL DEFAULT 'TBD';
-- Update with conditional logic based on position
UPDATE employees
SET department = CASE
WHEN position = 'Engineer' THEN 'Engineering'
WHEN position = 'Manager' THEN 'Management'
ELSE 'General'
END;
-- Optionally remove the default if you don't want it for future inserts
ALTER TABLE employees
ALTER COLUMN department DROP DEFAULT;
Boas práticas para colunas NOT NULL
-
Planeje com antecedência: considere as constraints
NOT NULLjá no design inicial da tabela - Use padrões significativos: escolha valores padrão que façam sentido para a sua lógica de negócio
-
Teste antes: sempre teste operações de
ALTER TABLEem uma cópia dos seus dados - Documente as mudanças: registre as modificações de schema para manter a equipe informada
- Pense na migração de dados: planeje como preencher a nova coluna com dados significativos
Verificando constraints NOT NULL
Depois de adicionar uma coluna NOT NULL, verifique se a constraint está aplicada:
-- Check table structure
DESCRIBE employees;
-- Verify constraint by attempting to insert NULL (should fail)
INSERT INTO employees (id, name, position, phone_number)
VALUES (3, 'Carol', 'Analyst', NULL);
-- Error: Column 'phone_number' cannot be null
Operações relacionadas
Agora que você sabe adicionar colunas, talvez queira aprender sobre outras operações de ALTER TABLE:
- Como renomear colunas usando ALTER TABLE
- PostgreSQL: alterar o tipo de uma coluna
- Como adicionar colunas no Teradata
Essas operações são essenciais para manter e evoluir o schema do seu banco de dados conforme os requisitos da sua aplicação mudam.
Conclusão
Usar ALTER TABLE para adicionar colunas permite modificar o schema sem perda de dados. Essa flexibilidade ajuda a adaptar seu banco de dados aos requisitos da aplicação, que estão sempre evoluindo. Sempre faça backup dos seus dados antes de alterar o schema e verifique a compatibilidade com a lógica da aplicação existente.
Para operações de banco de dados mais avançadas e para gerenciar seus bancos SQL com eficiência, experimente o Beekeeper Studio, que oferece uma interface intuitiva para gerenciar schemas e executar operações SQL.
Beekeeper Studio é um cliente de banco de dados gratuito e open source
A melhor ferramenta de consultas e edição de SQL que já usei. Tem tudo o que preciso para gerenciar meu banco de dados. - ⭐⭐⭐⭐⭐ Mit
O Beekeeper Studio é rápido, intuitivo e fácil de usar. Ele suporta vários bancos de dados e funciona muito bem no Windows, Mac e Linux.
O que os usuários dizem sobre o Beekeeper Studio
"O Beekeeper Studio substituiu completamente meu antigo fluxo de trabalho com SQL. É rápido, intuitivo e faz o trabalho com bancos de dados voltar a ser prazeroso."
"Já testei muitas GUIs de banco de dados, mas o Beekeeper encontra o equilíbrio perfeito entre recursos e simplicidade. Simplesmente funciona."