Curso
Em SQL, existem basicamente três tipos de comandos:
-
DDL - Data Definition Language (Linguagem de Definição de Dados), que reúne comandos SQL usados para definir o banco de dados: criar tabelas, definir especificações, alterar tabelas e assim por diante. Exemplos de DDL:
CREATE,DROP,ALTERetc. As mudanças feitas por comandos DDL não podem ser desfeitas (rollback). -
DML - Data Manipulation Language (Linguagem de Manipulação de Dados), que permite executar consultas de seleção, inserção, atualização e exclusão. As mudanças feitas por comandos DML podem ser revertidas. Exemplos:
SELECT,INSERT,UPDATEeDELETE. -
DCL - Data Control Language (Linguagem de Controle de Dados), que permite especificar direitos, permissões e outros controles do seu sistema de banco de dados.
Neste tutorial, você vai ver o uso do comando ALTER TABLE, que é de natureza DDL. Os seguintes tópicos serão abordados:
- Por que usar o comando
ALTER TABLE - Criando uma tabela em um banco de dados PostgreSQL
- Executando diferentes comandos
ALTER TABLEno PostgreSQL
Observação: este tutorial não vai ensinar a criar tabela, inserir dados ou selecionar dados em uma tabela no PostgreSQL. Se você quiser revisar esses tópicos, confira este artigo.
Por que usar o comando ALTER TABLE
As especificações de um banco de dados podem mudar com o tempo. Por exemplo, pode ser necessário adicionar uma coluna a uma tabela específica, definir outra chave primária para uma tabela ou alterar o tipo de dado de uma coluna. Nem sempre é viável excluir uma tabela e recriá-la do zero. O comando ALTER TABLE permite fazer tudo isso com facilidade. Com ALTER TABLE, você pode:
- Adicionar, modificar ou remover uma coluna
- Adicionar ou remover uma restrição (constraint)
Você também pode habilitar/desabilitar constraints, mas isso não está no escopo deste tutorial.
Você verá cada um dos casos de uso acima neste tutorial, mas antes disso, vamos criar uma tabela no PostgreSQL para começar. Na próxima seção, você vai criar uma tabela simples.
Criando uma tabela em um banco de dados PostgreSQL
Você vai criar uma tabela chamada student_details no PostgreSQL (usando o utilitário pgAdmin) com as seguintes colunas e tipos de dados:
- student_id (integer)
- student_full_name (character)
- student_year (integer)
Você vai começar com essa tabela contendo apenas três colunas. Depois, ao longo do tutorial, vai adicionar mais colunas e alterar a tabela de diferentes maneiras. A consulta de criação a seguir gera a tabela de acordo com as especificações acima:
CREATE TABLE student_details(
student_id SERIAL,
student_full_name VARCHAR (50),
student_year VARCHAR (100)
);
Vamos inserir alguns registros nessa tabela também:
INSERT INTO student_details(student_full_name, student_year) VALUES('John Doe','1st');INSERT INTO student_details(student_full_name, student_year) VALUES('Chris Villa','3rd');
Como o tipo de dado de student_id está definido como SERIAL, o PostgreSQL incrementa automaticamente o valor da coluna, e esse tipo é interpretado como integer por padrão no PostgreSQL.
A tabela student_details deve ficar assim:

Agora você tem uma tabela criada no PostgreSQL. Vamos ver outras aplicações de ALTER TABLE na próxima seção.
Executando diferentes comandos ALTER TABLE no PostgreSQL
Nesta seção, você vai ver o uso do ALTER TABLE das seguintes formas, como mencionado acima:
- Adicionar, modificar e remover uma coluna
- Adicionar e remover uma constraint
Adicionar, modificar ou remover uma coluna
Vamos começar adicionando mais uma coluna chamada student_grade (do tipo character) na tabela:
ALTER TABLE student_details ADD student_grade VARCHAR(5);
Agora, a tabela deve ficar assim:

Repare que, para os registros já inseridos, os valores da coluna student_grade estão como null. Isso é feito de forma implícita na maioria dos SGBDs relacionais. Porém, você sempre pode executar uma consulta de atualização para definir os valores. Agora vamos ver como modificar uma coluna usando ALTER TABLE. Você vai reduzir o tamanho máximo permitido da coluna student_year de 100 para 10, pois alocar muito espaço para apenas três caracteres (student_year pode ser 1st, 2nd ou 3rd) não é muito prático.
ALTER TABLE student_details ALTER COLUMN student_year TYPE VARCHAR(10);
Você pode ver o resultado na figura a seguir:

Também é possível renomear uma coluna. Veja como:
ALTER TABLE student_details RENAME student_id TO student_roll;
A consulta acima renomeia a coluna student_id para student_roll. Você pode verificar isso com uma consulta de seleção; seu resultado deve ser semelhante ao da figura a seguir:

Agora, vamos ver como remover uma coluna de uma tabela:
ALTER TABLE student_details DROP COLUMN student_year;
Essa consulta remove a coluna student_year, e a tabela após a execução deve ficar assim:

Observe que, se a coluna que você está removendo for referenciada por outra tabela, podem ocorrer erros de violação de integridade referencial.
Agora você vai ver como adicionar e remover constraints em uma tabela.
Adicionar e remover uma constraint.
A tabela student_details não tem chave primária. A chave primária combina as constraints not null e unique. Vamos definir a coluna student_roll (renomeada a partir de student_id) como chave primária de student_details:
ALTER TABLE student_details ADD PRIMARY KEY (student_roll);
Você também pode adicionar outras constraints. Por exemplo, dá para adicionar uma constraint check na coluna student_grade para que os valores sejam sempre A, B ou C.
ALTER TABLE student_details ADD CONSTRAINT year_check CHECK (student_grade IN ('A', 'B', 'C'));
year_check é um nome de referência para a constraint que você está adicionando à tabela. Agora, se você tentar inserir a seguinte linha, deverá receber um erro:
INSERT INTO student_details(student_full_name, student_grade) VALUES('David Lune','3rd');
O erro será parecido com o seguinte:

Remover uma constraint é semelhante. Você precisa informar o nome da constraint que deseja excluir. Vamos remover a constraint chamada year_check:
ALTER TABLE student_details DROP CONSTRAINT year_check;
Vamos verificar. Se a constraint year_check foi realmente removida, então esta consulta INSERT INTO student_details(student_full_name, student_grade) VALUES('David Lune','3rd'); não deve gerar erro. A tabela agora contém o registro:

Você pode testar outras constraints do tipo check também.
É isso por hoje!
Neste tutorial, você conheceu o comando ALTER TABLE para modificar o esquema de uma tabela de forma eficiente. Se quiser levar suas habilidades em SQL para o próximo nível, vale a pena conferir estes cursos da DataCamp:

