- 1 1. Introdução
- 2 2. Conceitos Básicos da Restrição UNIQUE
- 3 3. Como Usar a Restrição UNIQUE
- 4 4. Considerações Importantes para a Restrição UNIQUE
- 5 5. Perguntas Frequentes (FAQ)
- 5.1 Q1: Qual é a diferença entre UNIQUE e PRIMARY KEY?
- 5.2 Q2: O que acontece se você aplicar uma restrição UNIQUE a uma coluna que permite valores NULL?
- 5.3 Q3: Quando deve ser usada uma restrição UNIQUE composta?
- 5.4 Q4: Você pode adicionar uma restrição UNIQUE se já existirem dados duplicados?
- 5.5 Q5: Remover uma restrição UNIQUE também remove seu índice?
- 6 6. Resumo
1. Introdução
No design de bancos de dados, manter a unicidade dos dados é extremamente importante. Se o mesmo dado for registrado várias vezes, isso pode causar falhas no sistema e levar à inconsistência dos dados. O MySQL oferece um recurso chamado restrição UNIQUE para prevenir esse problema.
Por exemplo, quando usuários se registram em um serviço web, se o mesmo endereço de e‑mail for cadastrado múltiplas vezes, podem ocorrer erros de login. Para evitar essas situações, você pode usar a restrição UNIQUE para garantir que os valores em uma coluna específica permaneçam únicos.
Neste artigo, explicamos claramente a restrição UNIQUE do MySQL — desde o uso básico até exemplos avançados. Também abordamos considerações importantes e perguntas frequentes para que você possa aplicar esse conhecimento imediatamente em projetos reais.
2. Conceitos Básicos da Restrição UNIQUE
O que é uma restrição UNIQUE?
A restrição UNIQUE no MySQL impede valores duplicados em uma coluna específica ou em uma combinação de colunas. Ao aplicar essa restrição, você garante que o mesmo valor não possa ser inserido mais de uma vez.
Diferença entre UNIQUE e PRIMARY KEY
O MySQL também fornece a restrição PRIMARY KEY, que difere da restrição UNIQUE em vários aspectos.
- PRIMARY KEY é sempre NOT NULL
PRIMARY KEYnão apenas garante unicidade, mas também proíbe valores NULL. Em contraste, uma restriçãoUNIQUEpermite valores NULL. - Apenas uma PRIMARY KEY por tabela Uma tabela pode ter apenas uma
PRIMARY KEY, enquanto múltiplas restriçõesUNIQUEpodem ser definidas na mesma tabela.
Casos de Uso Comuns para a restrição UNIQUE
A restrição UNIQUE é comumente usada nos seguintes cenários:
- Endereços de e‑mail ou nomes de usuário Quando cada usuário deve ter um e‑mail ou nome de usuário único.
- Números de produto ou números de pedido Quando IDs de produto ou IDs de pedido não podem ser duplicados.
- Condições compostas Quando é necessário garantir unicidade entre duas ou mais colunas.
3. Como Usar a Restrição UNIQUE
Defina-a ao Criar uma Tabela
No MySQL, você pode definir uma restrição UNIQUE diretamente ao criar uma nova tabela.
Exemplo: Aplicar a uma Única Coluna
CREATE TABLE users (
id INT AUTO_INCREMENT,
email VARCHAR(255) UNIQUE,
PRIMARY KEY (id)
);
Neste exemplo, a coluna email tem uma restrição UNIQUE aplicada. Tentar inserir o mesmo endereço de e‑mail várias vezes resultará em um erro.
Exemplo: Múltiplas Colunas (Restrição UNIQUE Composta)
CREATE TABLE orders (
order_id INT AUTO_INCREMENT,
product_id INT,
user_id INT,
UNIQUE (product_id, user_id),
PRIMARY KEY (order_id)
);
Este exemplo garante que a combinação de product_id e user_id seja única. É útil quando se deseja impedir que o mesmo usuário faça o mesmo pedido de produto várias vezes.
Adicionar uma Restrição a uma Tabela Existente
Você também pode adicionar uma restrição UNIQUE a uma tabela já existente.
Exemplo: Adicionar uma Restrição a uma Única Coluna
ALTER TABLE users
ADD CONSTRAINT unique_email UNIQUE (email);
Exemplo: Adicionar uma Restrição Composta
ALTER TABLE orders
ADD CONSTRAINT unique_product_user UNIQUE (product_id, user_id);
Como Remover uma Restrição
Para remover uma restrição existente, use as instruções SQL a seguir:
Remover uma Restrição de Única Coluna
ALTER TABLE users
DROP INDEX unique_email;
Remover uma Restrição Composta
ALTER TABLE orders
DROP INDEX unique_product_user;
4. Considerações Importantes para a Restrição UNIQUE
Tratamento de Valores NULL
Ao aplicar uma restrição UNIQUE a uma coluna que permite valores NULL, regras especiais se aplicam. O MySQL não gera erro mesmo que existam múltiplos valores NULL na mesma coluna. Isso ocorre porque o MySQL trata valores NULL como “não iguais a nada”.
Exemplo:
CREATE TABLE test_table (
id INT AUTO_INCREMENT,
column1 INT UNIQUE,
PRIMARY KEY (id)
);
Agora, insira os seguintes dados:
INSERT INTO test_table (column1) VALUES (NULL);
INSERT INTO test_table (column1) VALUES (NULL);
Nenhum erro ocorrerá. Isso ocorre porque os valores NULL são considerados diferentes de qualquer outro valor, incluindo outro NULL.
Impacto de Desempenho
Quando você define uma restrição UNIQUE, o MySQL cria automaticamente um índice internamente. Esse índice ajuda na pesquisa e ordenação de dados, mas pode reduzir o desempenho ao inserir ou atualizar grandes volumes de dados.
- Nota 1: Ao inserir grandes quantidades de dados de uma só vez, a restrição
UNIQUEdeve ser verificada, o que pode desacelerar o processamento. - Nota 2: Para manter o desempenho ideal, considere reconstruir os índices antes que o volume de dados se torne muito grande.
Tratamento de Erros Quando Ocorram
Se ocorrer uma violação da restrição UNIQUE, o MySQL retorna o código de erro “1062”. Esse erro é disparado ao tentar inserir dados duplicados.
Exemplo:
INSERT INTO users (email) VALUES ('test@example.com');
INSERT INTO users (email) VALUES ('test@example.com');
A segunda inserção resultará em um erro.
Soluções:
- Verifique se os dados já existem antes de inserir.
SELECT COUNT(*) FROM users WHERE email = 'test@example.com';
- Use
ON DUPLICATE KEY UPDATEpara atualizar os dados quando um duplicado for detectado.INSERT INTO users (email) VALUES ('test@example.com') ON DUPLICATE KEY UPDATE email = 'test@example.com';
5. Perguntas Frequentes (FAQ)
Q1: Qual é a diferença entre UNIQUE e PRIMARY KEY?
PRIMARY KEY garante unicidade e não permite valores NULL. Apenas um PRIMARY KEY pode ser definido por tabela. Em contraste, restrições UNIQUE podem ser definidas em múltiplas colunas e permitem valores NULL.
Q2: O que acontece se você aplicar uma restrição UNIQUE a uma coluna que permite valores NULL?
Vários valores NULL podem ser inseridos. Isso ocorre porque o MySQL trata valores NULL como incomparáveis.
Q3: Quando deve ser usada uma restrição UNIQUE composta?
É usada quando você deseja garantir unicidade em uma combinação de colunas, como assegurar que a combinação de product_id e user_id seja única. Isso ajuda a impedir que um usuário faça o mesmo pedido de produto várias vezes.
Q4: Você pode adicionar uma restrição UNIQUE se já existirem dados duplicados?
Não. Se já existirem dados duplicados, você não pode adicionar uma restrição UNIQUE. Primeiro, é necessário remover ou corrigir os registros duplicados antes de adicionar a restrição.
Q5: Remover uma restrição UNIQUE também remove seu índice?
Sim. Quando você remove uma restrição UNIQUE, o índice associado também é removido.

6. Resumo
A restrição UNIQUE do MySQL é um recurso extremamente útil para garantir a unicidade dos dados. Ao compreender suas diferenças em relação ao PRIMARY KEY e como os valores NULL são tratados, você pode melhorar significativamente a qualidade do design do seu banco de dados.
O uso adequado da restrição UNIQUE é especialmente importante para manter a integridade do banco de dados. Utilize os métodos e considerações explicados neste artigo para aprimorar o design e a implementação do seu banco de dados.
No próximo artigo, exploraremos como usar índices de forma eficaz no MySQL e discutiremos outras restrições, como FOREIGN KEY e CHECK. Fique ligado!


