sql >> Base de Datos >  >> RDS >> SQLite

Restricción ÚNICA de SQLite

Resumen :en este tutorial, aprenderá a usar SQLite UNIQUE restricción para garantizar que todos los valores en una columna o un grupo de columnas sean únicos.

Introducción a SQLite UNIQUE restricción

UN UNIQUE La restricción garantiza que todos los valores de una columna o un grupo de columnas sean distintos entre sí o únicos.

Para definir un UNIQUE restricción, utiliza el UNIQUE palabra clave seguida de una o más columnas.

Puedes definir un UNIQUE restricción a nivel de columna o de tabla. Solo a nivel de tabla, puede definir un UNIQUE restricción en varias columnas.

A continuación se muestra cómo definir un UNIQUE restricción para una columna en el nivel de columna:

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

O a nivel de mesa:

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

A continuación se ilustra cómo definir un UNIQUE restricción para varias columnas:

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

Una vez un UNIQUE se define la restricción, si intenta insertar o actualizar un valor que ya existe en la columna, SQLite emitirá un error y cancelará la operación.

SQLite UNIQUE ejemplos de restricciones

Tomemos algunos ejemplos del uso de UNIQUE restricción.

Definiendo un UNIQUE restricción para un ejemplo de columna

La siguiente declaración crea una nueva tabla llamada contacts con un UNIQUE restricción definida para el email columna:

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)

El siguiente ejemplo inserta una nueva fila en contacts tabla:

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

Si intenta insertar un nuevo contacto con el mismo correo electrónico, recibirá un mensaje de error:

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

Aquí está el mensaje de error:

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

Definiendo un UNIQUE ejemplo de restricción para varias columnas

La siguiente instrucción crea las shapes tabla con un UNIQUE restricción definida para el background_color y foreground_color columnas:

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 siguiente declaración inserta una nueva fila en las shapes tabla:

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

La siguiente declaración funciona debido a que no hay violación de duplicación en ambos background_color y foreground_color columnas:

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

Sin embargo, la siguiente declaración provoca un error debido a los duplicados tanto en background_color y foreground_color columnas:

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

Aquí está el error:

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 restricción y NULL

SQLite trata todos los valores NULL son diferentes, por lo tanto, una columna con un UNIQUE la restricción puede tener múltiples valores NULL.

La siguiente declaración crea una nueva tabla llamada lists cuyo email la columna tiene un UNIQUE restricción:

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

La siguiente declaración inserta múltiples valores NULL en el email columna de las lists tabla:

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

Consultamos datos de las lists tabla:

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

Aquí está la salida:

Como puede ver, aunque la columna de correo electrónico tiene un UNIQUE restricción, puede aceptar múltiples valores NULL.

En este tutorial, ha aprendido a usar SQLite UNIQUE restricción para garantizar que todos los valores en una columna o un grupo de columnas sean únicos.