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.