SQLite
 sql >> Database >  >> RDS >> SQLite

Vincolo UNICO di SQLite

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.