CRUD é um modelo usado para representar quatro operações básicas do ciclo de vida dos dados: criar, consultar, atualizar e excluir. Ele não é um comando nem uma linguagem; em bancos relacionais, essas ações costumam ser implementadas com INSERT, SELECT, UPDATE e DELETE.
Antes do CRUD: criando a tabela
Usaremos uma tabela simples de alunos em PostgreSQL. O identificador é gerado automaticamente e a coluna de e-mail não permite valores repetidos.
CREATE TABLE alunos (
id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
nome VARCHAR(100) NOT NULL,
email VARCHAR(150) UNIQUE NOT NULL,
turma VARCHAR(30),
ativo BOOLEAN DEFAULT TRUE
);
1. Create: cadastrar um registro
O comando INSERT inclui uma nova linha. Informamos as colunas e, em seguida, os valores na mesma ordem.
INSERT INTO alunos (nome, email, turma)
VALUES ('Marina Alves', 'marina@email.com', '1ª Série A');
Também é possível cadastrar mais de um registro em um único comando:
INSERT INTO alunos (nome, email, turma)
VALUES
('João Lima', 'joao@email.com', '1ª Série B'),
('Ana Souza', 'ana@email.com', '1ª Série A');
2. Read: consultar registros
SELECT lê dados sem alterá-los. O asterisco solicita todas as colunas, mas em aplicações reais é melhor selecionar apenas as necessárias.
SELECT id, nome, turma FROM alunos WHERE ativo = TRUE ORDER BY nome;
O WHERE filtra, e o ORDER BY organiza. Para limitar resultados, podemos acrescentar LIMIT 10.
3. Update: atualizar um registro
UPDATE altera dados existentes. O WHERE define quais registros serão modificados.
UPDATE alunos SET turma = '1ª Série B' WHERE id = 1;
Sem a condição, todos os alunos receberiam a mesma turma. Antes de uma alteração importante, execute um SELECT com a mesma condição para confirmar o alvo.
4. Delete: excluir um registro
DELETE FROM alunos WHERE id = 1;
A exclusão física remove a linha. Alguns sistemas preferem a exclusão lógica: mantêm o registro e alteram um campo como ativo. Isso preserva histórico quando a regra de negócio permite.
UPDATE alunos SET ativo = FALSE WHERE id = 1;
Cuidados que evitam problemas
- Use WHERE em UPDATE e DELETE quando a intenção não for atingir toda a tabela.
- Valide dados também no servidor, não apenas na tela.
- Utilize parâmetros nas aplicações para reduzir risco de injeção SQL.
- Controle permissões: nem todo usuário deve excluir ou alterar registros.
- Mantenha backup e histórico para dados importantes.
- Use transações quando várias operações precisam acontecer juntas.
CRUD na interface de um sistema
| Ação do usuário | Operação | SQL comum |
|---|---|---|
| Cadastrar | Create | INSERT |
| Visualizar ou buscar | Read | SELECT |
| Editar | Update | UPDATE |
| Remover | Delete | DELETE |
Atividade prática
Crie uma tabela livros com id, título, autor, ano e disponível. Cadastre três livros, consulte apenas os disponíveis em ordem de título, atualize o ano de um registro e marque outro como indisponível. Por último, explique quando seria melhor excluir fisicamente ou apenas alterar o status.
Caso completo: cadastro de tarefas com regras
CRUD não é apenas associar quatro verbos a quatro comandos. Cada operação precisa respeitar regras. Em um cadastro de tarefas, uma tarefa pode exigir título, permitir descrição vazia, começar com situação “pendente” e registrar a data de criação. Atualizar somente a situação não deveria apagar o título. Excluir pode significar remoção definitiva ou arquivamento, conforme a necessidade de histórico.
CREATE TABLE tarefas (
id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
titulo VARCHAR(120) NOT NULL,
descricao TEXT,
situacao VARCHAR(20) NOT NULL DEFAULT 'pendente',
criada_em TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT situacao_valida
CHECK (situacao IN ('pendente', 'fazendo', 'concluida'))
);
A restrição impede situações inventadas. Antes de atualizar, consulte a linha pelo identificador; depois da atualização, confira o resultado. Em aplicações reais, use transação quando várias mudanças precisam acontecer juntas e parâmetros fornecidos pelo driver, em vez de concatenar texto recebido do usuário.
Plano de testes do CRUD
- Crie uma tarefa válida e confirme o valor padrão.
- Tente criar sem título e observe a rejeição.
- Consulte pelo identificador e por situação.
- Atualize apenas o título e verifique se os outros campos permanecem.
- Tente uma situação inválida.
- Exclua um registro de teste e confirme que o identificador correto foi afetado.
Execute os testes somente em uma base de estudo. Para aprender a localizar linhas com segurança, pratique WHERE, ORDER BY e LIMIT.
CRUD real inclui regras, não apenas quatro comandos
Em um cadastro de empréstimos, criar um registro só é permitido quando o exemplar está disponível; atualizar a devolução deve mudar também a situação do exemplar; excluir um usuário com empréstimo ativo não deve ser aceito. As operações continuam sendo CRUD, mas precisam respeitar consistência e autorização.
| Operação | Regra de exemplo | Teste negativo |
|---|---|---|
| Create | Não repetir identificador | Tentar cadastrar o mesmo ID |
| Read | Usuário vê apenas dados permitidos | Consultar registro de outro perfil |
| Update | Alterar somente registro localizado | Executar condição que não encontra linha |
| Delete | Preservar vínculos obrigatórios | Excluir registro referenciado |
Quando uma ação exige mais de uma operação
Registrar uma venda pode inserir o pedido, inserir itens e reduzir estoque. Se apenas parte for concluída, os dados ficam contraditórios. Sistemas de banco de dados usam transações para tratar esse conjunto como uma unidade: ou todas as etapas válidas são confirmadas, ou nenhuma delas permanece.
BEGIN;
INSERT INTO emprestimos (usuario_id, exemplar_id, data_retirada)
VALUES (12, 44, CURRENT_DATE);
UPDATE exemplares
SET disponivel = false
WHERE id = 44 AND disponivel = true;
COMMIT;
O exemplo é didático e ainda precisa verificar se o UPDATE realmente alterou uma linha. Em aplicações reais, validações, restrições e tratamento de erro completam o fluxo.
Plano de testes do cadastro
Para cada operação, crie um caso válido, um inválido e um de fronteira. Registre entrada, resultado esperado, resultado obtido e estado do banco depois da execução. O teste só termina quando você confirma os dados, não quando a interface mostra uma mensagem.
Perguntas frequentes
CRUD é uma linguagem?
Não. É uma forma de agrupar operações. Elas podem ser implementadas com SQL, APIs, interfaces e diferentes linguagens.
ORDER BY, LIMIT e LIKE fazem parte do CRUD?
São recursos usados principalmente na leitura, isto é, no SELECT. Eles organizam, limitam e filtram resultados.
DELETE sempre apaga para sempre?
No banco, a linha é removida; ainda pode existir em backups ou históricos. Sistemas também podem usar exclusão lógica em vez de DELETE.
Referências bibliográficas
Obras reconhecidas que fundamentam e aprofundam os conceitos apresentados neste artigo.
- ELMASRI, Ramez; NAVATHE, Shamkant B. Fundamentals of Database Systems . 7. ed. Pearson, 2016.
- BEAULIEU, Alan. Learning SQL . 3. ed. O’Reilly Media, 2020.