SQLite
 sql >> Base de données >  >> RDS >> SQLite

Contrainte UNIQUE SQLite

Résumé :dans ce tutoriel, vous apprendrez à utiliser le SQLite UNIQUE contrainte pour s'assurer que toutes les valeurs d'une colonne ou d'un groupe de colonnes sont uniques.

Introduction à SQLite UNIQUE contrainte

Un UNIQUE La contrainte garantit que toutes les valeurs d'une colonne ou d'un groupe de colonnes sont distinctes les unes des autres ou uniques.

Pour définir un UNIQUE contrainte, vous utilisez le UNIQUE mot-clé suivi d'une ou plusieurs colonnes.

Vous pouvez définir un UNIQUE contrainte au niveau de la colonne ou de la table. Uniquement au niveau de la table, vous pouvez définir un UNIQUE contrainte sur plusieurs colonnes.

Ce qui suit montre comment définir un UNIQUE contrainte pour une colonne au niveau de la colonne :

CREATE TABLE table_name(
    ...,
    column_name type UNIQUE,
    ...
);
Code language: SQL (Structured Query Language) (sql)

Ou au niveau de la table :

CREATE TABLE table_name(
    ...,
    UNIQUE(column_name)
);
Code language: SQL (Structured Query Language) (sql)

Ce qui suit illustre comment définir un UNIQUE contrainte pour plusieurs colonnes :

CREATE TABLE table_name(
    ...,
    UNIQUE(column_name1,column_name2,...)
);
Code language: SQL (Structured Query Language) (sql)

Une fois UNIQUE contrainte est définie, si vous tentez d'insérer ou de mettre à jour une valeur qui existe déjà dans la colonne, SQLite émettra une erreur et abandonnera l'opération.

SQLite UNIQUE exemples de contraintes

Prenons quelques exemples d'utilisation du UNIQUE contrainte.

Définir un UNIQUE contrainte pour un exemple de colonne

L'instruction suivante crée une nouvelle table nommée contacts avec un UNIQUE contrainte définie pour le email colonne :

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'exemple suivant insère une nouvelle ligne dans les contacts tableau :

INSERT INTO contacts(first_name,last_name,email)
VALUES ('John','Doe','[email protected]');
Code language: SQL (Structured Query Language) (sql)

Si vous tentez d'insérer un nouveau contact avec le même e-mail, vous obtiendrez un message d'erreur :

INSERT INTO contacts(first_name,last_name,email)
VALUES ('Johnny','Doe','[email protected]');
Code language: SQL (Structured Query Language) (sql)

Voici le message d'erreur :

Error while executing SQL query on database 'chinook': UNIQUE constraint failed: contacts.email
Code language: SQL (Structured Query Language) (sql)

Définir un UNIQUE exemple de contrainte pour plusieurs colonnes

L'instruction suivante crée les shapes table avec un UNIQUE contrainte définie pour le background_color et foreground_color colonnes :

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)

L'instruction suivante insère une nouvelle ligne dans les shapes tableau :

INSERT INTO shapes(background_color,foreground_color)
VALUES('red','green');
Code language: SQL (Structured Query Language) (sql)

L'instruction suivante fonctionne car il n'y a pas de violation de duplication dans les deux background_color et foreground_color colonnes :

INSERT INTO shapes(background_color,foreground_color)
VALUES('red','blue');
Code language: SQL (Structured Query Language) (sql)

Cependant, l'instruction suivante provoque une erreur en raison des doublons dans background_color et foreground_color colonnes :

INSERT INTO shapes(background_color,foreground_color)
VALUES('red','green');
Code language: SQL (Structured Query Language) (sql)

Voici l'erreur :

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 contrainte et NULL

SQLite traite toutes les valeurs NULL sont différentes, donc une colonne avec un UNIQUE contrainte peut avoir plusieurs valeurs NULL.

L'instruction suivante crée une nouvelle table nommée lists dont email la colonne a un UNIQUE contrainte :

CREATE TABLE lists(
    list_id INTEGER PRIMARY KEY,
    email TEXT UNIQUE
);
Code language: SQL (Structured Query Language) (sql)

L'instruction suivante insère plusieurs valeurs NULL dans le email colonne des lists tableau :

INSERT INTO lists(email)
VALUES(NULL),(NULL);
Code language: SQL (Structured Query Language) (sql)

Interrogeons les données des lists tableau :

SELECT * FROM lists;
Code language: SQL (Structured Query Language) (sql)

Voici le résultat :

Comme vous pouvez le voir, même si la colonne email a un UNIQUE contrainte, il peut accepter plusieurs valeurs NULL.

Dans ce tutoriel, vous avez appris à utiliser le SQLite UNIQUE contrainte pour s'assurer que toutes les valeurs d'une colonne ou d'un groupe de colonnes sont uniques.