Restrições UNIQUE e chaves compostas
Garanta a unicidade em uma ou várias colunas, entenda valores NULL em índices exclusivos e use unicidade composta para chaves naturais.
Restrições UNIQUE e chaves compostas é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.
UNIQUE: não são permitidas duplicatas
Uma restrição UNIQUE impede que duas linhas compartilhem o mesmo valor nas colunas restritas:
CREATE TABLE users (
id BIGSERIAL PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE,
username VARCHAR(50) UNIQUE
);UNIQUE cria um índice
Uma restrição UNIQUE é implementada com um índice B-tree exclusivo, portanto as buscas por essa coluna são rápidas.
-- This shows the implicit index:
SELECT indexname FROM pg_indexes WHERE tablename = 'users';UNIQUE composto
Exclusividade em uma combinação de colunas:
CREATE TABLE memberships (
user_id BIGINT NOT NULL,
group_id BIGINT NOT NULL,
role TEXT NOT NULL,
UNIQUE (user_id, group_id) -- a user can be in a group at most once
);UNIQUE versus PRIMARY KEY
Uma chave primária é essencialmente UNIQUE + NOT NULL + uma identidade designada. Uma tabela pode ter ONE chave primária, mas muitas restrições UNIQUE.
NULL em UNIQUE
O SQL padrão trata NULL como diferente de todos os outros valores, inclusive de outros NULL. Você pode ter várias linhas NULL em uma coluna UNIQUE:
CREATE TABLE invites (email VARCHAR(255) UNIQUE);
INSERT INTO invites VALUES (NULL), (NULL); -- both succeed
-- PostgreSQL 15+ offers UNIQUE NULLS NOT DISTINCT to treat NULL as equal:
CREATE TABLE invites2 (email VARCHAR(255) UNIQUE NULLS NOT DISTINCT);Chave primária composta
Se uma chave composta natural for adequada, use-a como PRIMARY KEY:
CREATE TABLE order_items (
order_id BIGINT NOT NULL REFERENCES orders(id) ON DELETE CASCADE,
product_id BIGINT NOT NULL REFERENCES products(id),
quantity INT NOT NULL CHECK (quantity > 0),
PRIMARY KEY (order_id, product_id)
);Chave substituta + chave natural UNIQUE
Um padrão comum: um identificador sintético como chave primária e a exclusividade do mundo real por meio de UNIQUE:
CREATE TABLE products (
id BIGSERIAL PRIMARY KEY,
sku VARCHAR(50) NOT NULL UNIQUE,
name TEXT NOT NULL
);Índices UNIQUE parciais
Exclusividade apenas entre algumas linhas:
-- One active email per user (deleted users can re-register):
CREATE UNIQUE INDEX users_active_email_idx
ON users (email)
WHERE deleted_at IS NULL;Índices UNIQUE de expressão
Exclusividade em uma expressão calculada — útil para e-mails que não diferenciam maiúsculas de minúsculas:
CREATE UNIQUE INDEX users_email_ci_idx ON users (LOWER(email));Erros de violação de UNIQUE
Uma inserção duplicada retorna:
ERROR: duplicate key value violates unique constraint "users_email_key"
DETAIL: Key (email)=(alice@example.com) already exists.UPSERT se baseia em UNIQUE
ON CONFLICT precisa de UNIQUE ou PRIMARY KEY como alvo — é assim que o PostgreSQL sabe o que conta como duplicata.
Recapitulação
UNIQUE é a segunda restrição mais importante, depois de NOT NULL.
- Simples ou composta
- UNIQUE parcial para "somente entre linhas ativas"
- UNIQUE de expressão para chaves que não diferenciam maiúsculas de minúsculas
- Fique atento à regra de que NULL é diferente
Verificação rápida
Uma coluna UNIQUE pode conter vários valores NULL no SQL padrão?
Perguntas Frequentes
A aula “Restrições UNIQUE e chaves compostas” é grátis?
Sim — o texto completo de “Restrições UNIQUE e chaves compostas” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.
O que vou aprender em “Restrições UNIQUE e chaves compostas”?
Garanta a unicidade em uma ou várias colunas, entenda valores NULL em índices exclusivos e use unicidade composta para chaves naturais. Você pratica SQL Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar SQL Academy?
Nenhuma experiência prévia é necessária. SQL Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Restrições UNIQUE e chaves compostas”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de SQL Academy?
Sim. Cada aula de SQL Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Restrições NOT NULL e CHECK
- Restrições UNIQUE e chaves compostas
- FOREIGN KEY e ações referenciais
- Valores DEFAULT e colunas geradas