sql >> Databáze >  >> RDS >> SQLite

SQLite UNIQUE omezení

Shrnutí :v tomto tutoriálu se naučíte používat SQLite UNIQUE omezení, aby bylo zajištěno, že všechny hodnoty ve sloupci nebo skupině sloupců jsou jedinečné.

Úvod do SQLite UNIQUE omezení

UNIQUE omezení zajišťuje, že všechny hodnoty ve sloupci nebo skupině sloupců jsou navzájem odlišné nebo jedinečné.

Chcete-li definovat UNIQUE omezení, použijete UNIQUE klíčové slovo následované jedním nebo více sloupci.

Můžete definovat UNIQUE omezení na úrovni sloupce nebo tabulky. Pouze na úrovni tabulky můžete definovat UNIQUE omezení napříč více sloupci.

Následující text ukazuje, jak definovat UNIQUE omezení pro sloupec na úrovni sloupce:

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

Nebo na úrovni tabulky:

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

Následující text ukazuje, jak definovat UNIQUE omezení pro více sloupců:

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

Jednou UNIQUE omezení je definováno, pokud se pokusíte vložit nebo aktualizovat hodnotu, která již ve sloupci existuje, SQLite vydá chybu a přeruší operaci.

SQLite UNIQUE příklady omezení

Podívejme se na několik příkladů použití UNIQUE omezení.

Definování UNIQUE omezení pro jeden příklad sloupce

Následující příkaz vytvoří novou tabulku s názvem contacts s UNIQUE omezení definované pro email sloupec:

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)

Následující příklad vloží nový řádek do contacts tabulka:

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

Pokud se pokusíte vložit nový kontakt se stejným e-mailem, zobrazí se chybová zpráva:

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

Zde je chybová zpráva:

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

Definování UNIQUE omezení pro více sloupců příklad

Následující příkaz vytvoří shapes tabulka s UNIQUE omezení definované pro background_color a foreground_color sloupce:

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)

Následující příkaz vloží nový řádek do shapes tabulka:

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

Následující příkaz funguje, protože v obou background_color nedochází k porušení duplikace a foreground_color sloupce:

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

Následující příkaz však způsobuje chybu kvůli duplikátům v obou background_color a foreground_color sloupce:

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

Zde je chyba:

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 omezení a NULL

SQLite považuje všechny hodnoty NULL za odlišné, proto sloupec s UNIQUE omezení může mít více hodnot NULL.

Následující příkaz vytvoří novou tabulku s názvem lists jehož email sloupec má UNIQUE omezení:

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

Následující příkaz vloží do email více hodnot NULL sloupec lists tabulka:

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

Pojďme se dotazovat na data ze lists tabulka:

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

Zde je výstup:

Jak vidíte, i když sloupec e-mailu má UNIQUE omezení, může přijmout více hodnot NULL.

V tomto tutoriálu jste se naučili používat SQLite UNIQUE omezení, aby bylo zajištěno, že všechny hodnoty ve sloupci nebo skupině sloupců jsou jedinečné.


  1. Přemostění RDBMS a NoSQL:Úvod do 2DX UI clusteru

  2. SET NULL:Zadejte řetězec, který se má vrátit, kdykoli se v SQLcl / SQL*Plus objeví hodnota Null

  3. Dokončete proces kopírování tabulky z jedné databáze do druhé (Export-Import) na SQL Server

  4. Jak aktuální_datum funguje v PostgreSQL