Riepilogo :in questo tutorial imparerai come usare SQLite UNIQUE
vincolo per garantire che tutti i valori in una colonna o in un gruppo di colonne siano univoci.
Introduzione a SQLite UNIQUE
vincolo
Un UNIQUE
il vincolo garantisce che tutti i valori in una colonna o in un gruppo di colonne siano distinti l'uno dall'altro o univoci.
Per definire un UNIQUE
vincolo, usi il UNIQUE
parola chiave seguita da una o più colonne.
Puoi definire un UNIQUE
vincolo a livello di colonna o tabella. Solo a livello di tabella puoi definire un UNIQUE
vincolo su più colonne.
Quanto segue mostra come definire un UNIQUE
vincolo per una colonna a livello di colonna:
CREATE TABLE table_name(
...,
column_name type UNIQUE,
...
);
Code language: SQL (Structured Query Language) (sql)
Oppure a livello di tavolo:
CREATE TABLE table_name(
...,
UNIQUE(column_name)
);
Code language: SQL (Structured Query Language) (sql)
Di seguito viene illustrato come definire un UNIQUE
vincolo per più colonne:
CREATE TABLE table_name(
...,
UNIQUE(column_name1,column_name2,...)
);
Code language: SQL (Structured Query Language) (sql)
Una volta un UNIQUE
vincolo è definito, se si tenta di inserire o aggiornare un valore già esistente nella colonna, SQLite emetterà un errore e interromperà l'operazione.
SQLite UNIQUE
esempi di vincoli
Prendiamo alcuni esempi di utilizzo di UNIQUE
vincolo.
Definizione di un UNIQUE
vincolo per un esempio di colonna
La seguente istruzione crea una nuova tabella denominata contacts
con un UNIQUE
vincolo definito per l'email
colonna:
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)
L'esempio seguente inserisce una nuova riga nei contacts
tabella:
INSERT INTO contacts(first_name,last_name,email)
VALUES ('John','Doe','[email protected]');
Code language: SQL (Structured Query Language) (sql)
Se tenti di inserire un nuovo contatto con la stessa email, riceverai un messaggio di errore:
INSERT INTO contacts(first_name,last_name,email)
VALUES ('Johnny','Doe','[email protected]');
Code language: SQL (Structured Query Language) (sql)
Ecco il messaggio di errore:
Error while executing SQL query on database 'chinook': UNIQUE constraint failed: contacts.email
Code language: SQL (Structured Query Language) (sql)
Definizione di un UNIQUE
esempio di vincolo per più colonne
La seguente istruzione crea le shapes
tabella con un UNIQUE
vincolo definito per background_color
e foreground_color
colonne:
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)
La seguente istruzione inserisce una nuova riga nelle shapes
tabella:
INSERT INTO shapes(background_color,foreground_color)
VALUES('red','green');
Code language: SQL (Structured Query Language) (sql)
La seguente istruzione funziona a causa dell'assenza di violazione di duplicazione in entrambi background_color
e foreground_color
colonne:
INSERT INTO shapes(background_color,foreground_color)
VALUES('red','blue');
Code language: SQL (Structured Query Language) (sql)
Tuttavia, la seguente istruzione causa un errore a causa dei duplicati in entrambi background_color
e foreground_color
colonne:
INSERT INTO shapes(background_color,foreground_color)
VALUES('red','green');
Code language: SQL (Structured Query Language) (sql)
Ecco l'errore:
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
vincolo e NULL
SQLite tratta tutti i valori NULL sono diversi, quindi una colonna con un UNIQUE
il vincolo può avere più valori NULL.
La seguente istruzione crea una nuova tabella denominata lists
il cui email
la colonna ha un UNIQUE
vincolo:
CREATE TABLE lists(
list_id INTEGER PRIMARY KEY,
email TEXT UNIQUE
);
Code language: SQL (Structured Query Language) (sql)
La seguente istruzione inserisce più valori NULL nell'email
colonna degli lists
tabella:
INSERT INTO lists(email)
VALUES(NULL),(NULL);
Code language: SQL (Structured Query Language) (sql)
Eseguiamo una query sui dati dagli lists
tabella:
SELECT * FROM lists;
Code language: SQL (Structured Query Language) (sql)
Ecco l'output:
Come puoi vedere, anche se la colonna email ha un UNIQUE
vincolo, può accettare più valori NULL.
In questo tutorial, hai imparato a usare SQLite UNIQUE
vincolo per garantire che tutti i valori in una colonna o in un gruppo di colonne siano univoci.