0Pricing
SQL Academy · Aula

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

  1. Restrições NOT NULL e CHECK
  2. Restrições UNIQUE e chaves compostas
  3. FOREIGN KEY e ações referenciais
  4. Valores DEFAULT e colunas geradas
← Voltar para SQL Academy