Resumo : neste tutorial, você aprenderá como usar a UNIQUE
restrição SQLite para garantir que todos os valores em uma coluna ou grupo de colunas sejam exclusivos.
UNIQUE
Introdução à restrição SQLite
Uma UNIQUE
restrição garante que todos os valores em uma coluna ou grupo de colunas sejam distintos uns dos outros ou únicos.
Para definir uma UNIQUE
restrição, você usa a UNIQUE
palavra-chave seguida por uma ou mais colunas.
Você pode definir uma UNIQUE
restrição no nível da coluna ou da tabela. Somente no nível da tabela é possível definir uma UNIQUE
restrição em diversas colunas.
Veja a seguir como definir uma UNIQUE
restriçã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 UNIQUE
restrição para múltiplas colunas:
CREATE TABLE table_name(
...,
UNIQUE(column_name1,column_name2,...)
);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
UNIQUE
Uma 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.
UNIQUE
Exemplos de restrições SQLite
Vejamos alguns exemplos de uso da UNIQUE
restrição.
Definindo uma UNIQUE
restrição para um exemplo de coluna
A instrução a seguir cria uma nova tabela nomeada contacts
com uma UNIQUE
restrição definida para a email
coluna:
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 contacts
tabela:
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 UNIQUE
restrição para múltiplas colunas
A instrução a seguir cria a shapes
tabela com uma UNIQUE
restrição definida para as colunas background_color
e :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 shapes
tabela:
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_color
e 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_color
e 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 UNIQUE
e NULL
SQLite trata todos os valores NULL como diferentes, portanto, uma coluna com uma UNIQUE
restrição pode ter vários valores NULL.
A instrução a seguir cria uma nova tabela chamada lists
cuja email
coluna possui uma UNIQUE
restriçã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 email
coluna da lists
tabela:
INSERT INTO lists(email)
VALUES(NULL),(NULL);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Vamos consultar os dados da lists
tabela:
SELECT * FROM lists;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Aqui está a saída:
Como você pode ver, mesmo que a coluna email tenha uma UNIQUE
restrição, ela pode aceitar vários valores NULL.
Neste tutorial, você aprendeu como usar a UNIQUE
restrição SQLite para garantir que todos os valores em uma coluna ou grupo de colunas sejam exclusivos.