Índice ÚNICO do MySQL

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 KEYrestriçã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 INDEXinstruçã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 UNIQUErestrição.

Quando você cria uma UNIQUErestriçã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 INDEXem vez do UNIQUE KEYporque são sinônimos.

Se quiser adicionar uma restrição exclusiva a uma tabela existente, você pode usar a ALTER TABLEinstruçã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 UNIQUErestriçã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 contactstabela seja único.

Para impor esta regra, você cria uma restrição exclusiva na CREATE TABLEinstruçã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 INDEXESinstrução, verá que o MySQL criou um UNIQUEíndice para emaila coluna.

SHOW INDEXES FROM contacts;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
Exemplo de restrição UNIQUE do MySQL

Vamos inserir uma linha na contactstabela.

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_namee   phonetambém seja único entre os contatos. Nesse caso, você usa a CREATE INDEXinstruçã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 à contactstabela causa um erro porque a combinação de first_name, last_namee phonejá 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.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *