SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

Restrição ÚNICA SQLite


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

Introdução ao SQLite UNIQUE restrição


Um UNIQUE A restrição garante que todos os valores em uma coluna ou grupo de colunas sejam distintos uns dos outros ou exclusivos.

Para definir um UNIQUE restrição, você usa o UNIQUE palavra-chave seguida por uma ou mais colunas.

Você pode definir um UNIQUE restrição no nível da coluna ou da tabela. Apenas no nível da tabela, você pode definir um UNIQUE restrição em várias colunas.

O seguinte mostra como definir um UNIQUE restrição para uma coluna no nível da coluna:
CREATE TABLE table_name(
    ...,
    column_name type UNIQUE,
    ...
);
Code language: SQL (Structured Query Language) (sql)

Ou no nível da mesa:
CREATE TABLE table_name(
    ...,
    UNIQUE(column_name)
);
Code language: SQL (Structured Query Language) (sql)

O seguinte ilustra como definir um UNIQUE restrição para várias colunas:
CREATE TABLE table_name(
    ...,
    UNIQUE(column_name1,column_name2,...)
);
Code language: SQL (Structured Query Language) (sql)

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

SQLite UNIQUE exemplos de restrições


Vejamos alguns exemplos de uso do UNIQUE limitação.

Definindo um UNIQUE restrição para um exemplo de coluna


A instrução a seguir cria uma nova tabela chamada contacts com um UNIQUE restrição definida para o email coluna:
CREATE TABLE contacts(
    contact_id INTEGER PRIMARY KEY,
    first_name TEXT,
    last_name TEXT,
    email TEXT NOT NULL UNIQUE
);
Code language: SQL (Structured Query Language) (sql)

O exemplo a seguir insere uma nova linha nos contacts tabela:
INSERT INTO contacts(first_name,last_name,email)
VALUES ('John','Doe','[email protected]');
Code language: SQL (Structured Query Language) (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]');
Code language: SQL (Structured Query Language) (sql)

Aqui está a mensagem de erro:
Error while executing SQL query on database 'chinook': UNIQUE constraint failed: contacts.email
Code language: SQL (Structured Query Language) (sql)

Definindo um UNIQUE exemplo de restrição para várias colunas


A instrução a seguir cria as shapes tabela com um UNIQUE restrição definida para o background_color e foreground_color colunas:
CREATE TABLE shapes(
    shape_id INTEGER PRIMARY KEY,
    background_color TEXT,
    foreground_color TEXT,
    UNIQUE(background_color,foreground_color)
);
Code language: SQL (Structured Query Language) (sql)

A instrução a seguir insere uma nova linha nas shapes tabela:
INSERT INTO shapes(background_color,foreground_color)
VALUES('red','green');
Code language: SQL (Structured Query Language) (sql)

A instrução a seguir funciona porque não há violação de duplicação em background_color e foreground_color colunas:
INSERT INTO shapes(background_color,foreground_color)
VALUES('red','blue');
Code language: SQL (Structured Query Language) (sql)

No entanto, a instrução a seguir causa um erro devido às duplicatas em background_color e foreground_color colunas:
INSERT INTO shapes(background_color,foreground_color)
VALUES('red','green');
Code language: SQL (Structured Query Language) (sql)

Aqui está o erro:
Error while executing SQL query on database 'chinook': `UNIQUE` constraint failed: shapes.background_color, shapes.foreground_color
Code language: SQL (Structured Query Language) (sql)

SQLite UNIQUE restrição e NULL


SQLite trata todos os valores NULL são diferentes, portanto, uma coluna com um UNIQUE restrição pode ter vários valores NULL.

A instrução a seguir cria uma nova tabela chamada lists cujo email coluna tem um UNIQUE limitação:
CREATE TABLE lists(
    list_id INTEGER PRIMARY KEY,
    email TEXT UNIQUE
);
Code language: SQL (Structured Query Language) (sql)

A instrução a seguir insere vários valores NULL no email coluna das lists tabela:
INSERT INTO lists(email)
VALUES(NULL),(NULL);
Code language: SQL (Structured Query Language) (sql)

Vamos consultar dados das lists tabela:
SELECT * FROM lists;
Code language: SQL (Structured Query Language) (sql)

Aqui está a saída:

Como você pode ver, mesmo que a coluna de email tenha um UNIQUE restrição, ele pode aceitar vários valores NULL.

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