Restrição SQLite UNIQUE

Resumo : neste tutorial, você aprenderá como usar a UNIQUErestrição SQLite para garantir que todos os valores em uma coluna ou grupo de colunas sejam exclusivos.

UNIQUEIntrodução à restrição SQLite

Uma UNIQUErestrição garante que todos os valores em uma coluna ou grupo de colunas sejam distintos uns dos outros ou únicos.

Para definir uma UNIQUErestrição, você usa a UNIQUEpalavra-chave seguida por uma ou mais colunas.

Você pode definir uma UNIQUErestrição no nível da coluna ou da tabela. Somente no nível da tabela é possível definir uma UNIQUErestrição em diversas colunas.

Veja a seguir como definir uma UNIQUErestrição para uma coluna no nível da coluna:

CREATE TABLE table_name(
    ...,
    column_name type UNIQUE,
    ...
);
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Ou no nível da tabela:

CREATE TABLE table_name(
    ...,
    UNIQUE(column_name)
);
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

O seguinte ilustra como definir uma UNIQUErestrição para múltiplas colunas:

CREATE TABLE table_name(
    ...,
    UNIQUE(column_name1,column_name2,...)
);
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

UNIQUEUma vez definida uma restrição, se você tentar inserir ou atualizar um valor que já existe na coluna, o SQLite emitirá um erro e abortará a operação.

UNIQUEExemplos de restrições SQLite

Vejamos alguns exemplos de uso da UNIQUErestrição.

Definindo uma  UNIQUErestrição para um exemplo de coluna

A instrução a seguir cria uma nova tabela nomeada contactscom uma UNIQUErestrição definida para a emailcoluna:

CREATE TABLE contacts(
    contact_id INTEGER PRIMARY KEY,
    first_name TEXT,
    last_name TEXT,
    email TEXT NOT NULL UNIQUE
);
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

O exemplo a seguir insere uma nova linha na contactstabela:

INSERT INTO contacts(first_name,last_name,email)
VALUES ('John','Doe','[email protected]');
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Se você tentar inserir um novo contato com o mesmo e-mail, receberá uma mensagem de erro:

INSERT INTO contacts(first_name,last_name,email)
VALUES ('Johnny','Doe','[email protected]');
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Aqui está a mensagem de erro:

Error while executing SQL query on database 'chinook': UNIQUE constraint failed: contacts.email
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Exemplo de definição de uma UNIQUErestrição para múltiplas colunas

A instrução a seguir cria a shapestabela com uma UNIQUErestrição definida para as colunas background_colore :foreground_color

CREATE TABLE shapes(
    shape_id INTEGER PRIMARY KEY,
    background_color TEXT,
    foreground_color TEXT,
    UNIQUE(background_color,foreground_color)
);
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

A instrução a seguir insere uma nova linha na shapestabela:

INSERT INTO shapes(background_color,foreground_color)
VALUES('red','green');
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

A instrução a seguir funciona porque não há violação de duplicação nas colunas background_colore foreground_color:

INSERT INTO shapes(background_color,foreground_color)
VALUES('red','blue');
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

No entanto, a instrução a seguir causa um erro devido às duplicatas nas colunas background_colore foreground_color:

INSERT INTO shapes(background_color,foreground_color)
VALUES('red','green');
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Aqui está o erro:

Error while executing SQL query on database 'chinook': `UNIQUE` constraint failed: shapes.background_color, shapes.foreground_color
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Restrição SQLite UNIQUEe NULL

SQLite trata todos os valores NULL como diferentes, portanto, uma coluna com uma UNIQUErestrição pode ter vários valores NULL.

A instrução a seguir cria uma nova tabela chamada listscuja emailcoluna possui uma UNIQUErestrição:

CREATE TABLE lists(
    list_id INTEGER PRIMARY KEY,
    email TEXT UNIQUE
);
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

A instrução a seguir insere vários valores NULL na emailcoluna da liststabela:

INSERT INTO lists(email)
VALUES(NULL),(NULL);
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Vamos consultar os dados da liststabela:

SELECT * FROM lists;
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Aqui está a saída:

Exemplo de restrição SQLite UNIQUE

Como você pode ver, mesmo que a coluna email tenha uma UNIQUErestrição, ela pode aceitar vários valores NULL.

Neste tutorial, você aprendeu como usar a UNIQUErestrição SQLite para garantir que todos os valores em uma coluna ou grupo de colunas sejam exclusivos.

Deixe um comentário

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