Resumo : neste tutorial, você aprenderá como usar o UNIQUE
índice MySQL para evitar valores duplicados em uma ou mais colunas de uma tabela.
Introdução ao índice MySQL UNIQUE
Para impor o valor de exclusividade de uma ou mais colunas, você costuma usar a PRIMARY KEY
restrição. No entanto, cada tabela pode ter apenas uma chave primária. Portanto, se você quiser ter mais de uma coluna ou um conjunto de colunas com valores exclusivos, não poderá usar a restrição de chave primária.
Felizmente, o MySQL fornece outro tipo de índice chamado UNIQUE
índice que permite impor a exclusividade dos valores em uma ou mais colunas. Ao contrário do PRIMARY KEY
índice, você pode ter mais de um UNIQUE
índice por tabela.
Para criar um UNIQUE
índice, você usa a CREATE UNIQUE INDEX
instrução da seguinte forma:
CREATE UNIQUE INDEX index_name
ON table_name(index_column_1,index_column_2,...);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Outra forma de impor a exclusividade do valor em uma ou mais colunas é usar a UNIQUE
restrição.
Quando você cria uma UNIQUE
restrição , o MySQL cria um UNIQUE
índice nos bastidores.
A instrução a seguir ilustra como criar uma restrição exclusiva ao criar uma tabela .
CREATE TABLE table_name(
...
UNIQUE KEY(index_column_,index_column_2,...)
);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Nesta declaração, você também pode usar o UNIQUE INDEX
em vez do UNIQUE KEY
porque são sinônimos.
Se quiser adicionar uma restrição exclusiva a uma tabela existente, você pode usar a ALTER TABLE
instrução a seguir:
ALTER TABLE table_name
ADD CONSTRAINT constraint_name UNIQUE KEY(column_1,column_2,...);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Índice ÚNICO do MySQL eNULL
Ao contrário de outros sistemas de banco de dados, o MySQL considera valores NULL como valores distintos. Portanto, você pode ter vários valores NULL no UNIQUE
índice.
Foi assim que o MySQL foi projetado. Não é um bug, embora tenha sido relatado como um bug .
Outro ponto importante é que a UNIQUE
restrição não se aplica a valores NULL, exceto para o mecanismo de armazenamento BDB .
Exemplos de índice UNIQUE do MySQL
Suponha que você queira gerenciar contatos em um aplicativo. Você também deseja que o email de cada contato na contacts
tabela seja único.
Para impor esta regra, você cria uma restrição exclusiva na CREATE TABLE
instrução da seguinte forma:
CREATE TABLE IF NOT EXISTS contacts (
id INT AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
phone VARCHAR(15) NOT NULL,
email VARCHAR(100) NOT NULL,
UNIQUE KEY unique_email (email)
);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Se você usar a SHOW INDEXES
instrução, verá que o MySQL criou um UNIQUE
índice para email
a coluna.
SHOW INDEXES FROM contacts;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Vamos inserir uma linha na contacts
tabela.
INSERT INTO contacts(first_name,last_name,phone,email)
VALUES('John','Doe','(408)-999-9765','[email protected]');
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Agora, se você tentar inserir uma linha cujo email seja [email protected]
, receberá uma mensagem de erro.
INSERT INTO contacts(first_name,last_name,phone,email)
VALUES('Johny','Doe','(408)-999-4321','[email protected]');
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Error Code: 1062. Duplicate entry '[email protected]' for key 'unique_email'
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Suponha que você queira uma combinação de first_name
, last_name
e phone
também seja único entre os contatos. Nesse caso, você usa a CREATE INDEX
instrução para criar um UNIQUE
índice para essas colunas da seguinte forma:
CREATE UNIQUE INDEX idx_name_phone
ON contacts(first_name,last_name,phone);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Adicionar a linha a seguir à contacts
tabela causa um erro porque a combinação de first_name
, last_name
e phone
já existe.
INSERT INTO contacts(first_name,last_name,phone,email)
VALUES('john','doe','(408)-999-9765','[email protected]');
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Error Code: 1062. Duplicate entry 'john-doe-(408)-999-9765' for key 'idx_name_phone'
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Neste tutorial, você aprendeu como usar o UNIQUE
índice MySQL para evitar valores duplicados no banco de dados.