sql >> Databasteknik >  >> RDS >> SQLite

SQLite UNIK begränsning

Sammanfattning :i denna handledning kommer du att lära dig hur du använder SQLite UNIQUE begränsning för att säkerställa att alla värden i en kolumn eller en grupp av kolumner är unika.

Introduktion till SQLite UNIQUE begränsning

En UNIQUE begränsning säkerställer att alla värden i en kolumn eller en grupp av kolumner är skilda från varandra eller unika.

För att definiera en UNIQUE begränsning använder du UNIQUE nyckelord följt av en eller flera kolumner.

Du kan definiera en UNIQUE begränsning på kolumn- eller tabellnivå. Endast på tabellnivå kan du definiera en UNIQUE begränsning över flera kolumner.

Följande visar hur man definierar en UNIQUE begränsning för en kolumn på kolumnnivå:

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

Eller på tabellnivå:

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

Följande illustrerar hur man definierar en UNIQUE begränsning för flera kolumner:

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

En gång en UNIQUE begränsning är definierad, om du försöker infoga eller uppdatera ett värde som redan finns i kolumnen kommer SQLite att utfärda ett fel och avbryta operationen.

SQLite UNIQUE exempel på begränsningar

Låt oss ta några exempel på hur du använder UNIQUE begränsning.

Definiera en UNIQUE begränsning för en kolumnexempel

Följande sats skapar en ny tabell med namnet contacts med en UNIQUE begränsning definierad för email kolumn:

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)

Följande exempel infogar en ny rad i contacts tabell:

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

Om du försöker infoga en ny kontakt med samma e-postadress får du ett felmeddelande:

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

Här är felmeddelandet:

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

Definiera en UNIQUE begränsning för flera kolumner exempel

Följande sats skapar shapes tabell med en UNIQUE begränsning definierad för background_color och foreground_color kolumner:

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)

Följande sats infogar en ny rad i shapes tabell:

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

Följande uttalande fungerar på grund av ingen dupliceringsöverträdelse i båda background_color och foreground_color kolumner:

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

Följande sats orsakar dock ett fel på grund av dubbletterna i båda background_color och foreground_color kolumner:

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

Här är felet:

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 constraint och NULL

SQLite behandlar alla NULL-värden är olika, därför är en kolumn med en UNIQUE begränsning kan ha flera NULL-värden.

Följande sats skapar en ny tabell med namnet lists vars email kolumnen har en UNIQUE begränsning:

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

Följande sats infogar flera NULL-värden i email kolumnen i lists tabell:

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

Låt oss fråga data från lists tabell:

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

Här är resultatet:

Som du kan se, även om e-postkolumnen har en UNIQUE begränsning, kan den acceptera flera NULL-värden.

I den här handledningen har du lärt dig hur du använder SQLite UNIQUE begränsning för att säkerställa att alla värden i en kolumn eller en grupp kolumner är unika.


  1. mysqli:kan det förbereda flera frågor i ett uttalande?

  2. En snabb titt på SQL Servers numeriska funktioner

  3. Undantag ORA-08103:objektet existerar inte längre vid användning av setfetchsize av Hibernate

  4. mysql fulltextsökning misslyckades