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

SQLite UNIK begrænsning

Oversigt :i denne øvelse vil du lære, hvordan du bruger SQLite UNIQUE begrænsning for at sikre, at alle værdier i en kolonne eller en gruppe af kolonner er unikke.

Introduktion til SQLite UNIQUE begrænsning

En UNIQUE begrænsning sikrer, at alle værdier i en kolonne eller en gruppe af kolonner er forskellige fra hinanden eller er unikke.

For at definere en UNIQUE begrænsning, bruger du UNIQUE søgeord efterfulgt af en eller flere kolonner.

Du kan definere en UNIQUE begrænsning på kolonne- eller tabelniveau. Kun på tabelniveau kan du definere en UNIQUE begrænsning på tværs af flere kolonner.

Det følgende viser, hvordan man definerer en UNIQUE begrænsning for en kolonne på kolonneniveau:

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

Eller på bordniveau:

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

Det følgende illustrerer, hvordan man definerer en UNIQUE begrænsning for flere kolonner:

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

En gang en UNIQUE begrænsning er defineret, hvis du forsøger at indsætte eller opdatere en værdi, der allerede findes i kolonnen, vil SQLite udstede en fejl og afbryde handlingen.

SQLite UNIQUE eksempler på begrænsninger

Lad os tage nogle eksempler på brug af UNIQUE begrænsning.

Definition af en UNIQUE begrænsning for én kolonne eksempel

Følgende sætning opretter en ny tabel med navnet contacts med en UNIQUE begrænsning defineret for email kolonne:

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ølgende eksempel indsætter en ny række i contacts tabel:

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

Hvis du forsøger at indsætte en ny kontakt med samme e-mail, får du en fejlmeddelelse:

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

Her er fejlmeddelelsen:

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

Definition af en UNIQUE begrænsning for flere kolonner eksempel

Følgende sætning opretter shapes tabel med en UNIQUE begrænsning defineret for background_color og foreground_color kolonner:

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ølgende sætning indsætter en ny række i shapes tabel:

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

Følgende erklæring fungerer på grund af ingen overtrædelse af duplikering i begge background_color og foreground_color kolonner:

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

Den følgende sætning forårsager dog en fejl på grund af dubletterne i både background_color og foreground_color kolonner:

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

Her er fejlen:

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 og NULL

SQLite behandler alle NULL-værdier er forskellige, derfor er en kolonne med en UNIQUE begrænsning kan have flere NULL-værdier.

Følgende sætning opretter en ny tabel med navnet lists hvis email kolonne har en UNIQUE begrænsning:

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

Følgende sætning indsætter flere NULL-værdier i email kolonne i lists tabel:

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

Lad os forespørge data fra lists tabel:

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

Her er outputtet:

Som du kan se, selvom e-mail-kolonnen har en UNIQUE begrænsning, kan den acceptere flere NULL-værdier.

I denne øvelse har du lært, hvordan du bruger SQLite UNIQUE begrænsning for at sikre, at alle værdier i en kolonne eller en gruppe af kolonner er unikke.


  1. Opret HTML-tabel med SQL FOR XML

  2. Sådan ser du den faktiske Oracle SQL-sætning, der udføres

  3. Minimal logning med INSERT...SELECT og hurtig indlæsningskontekst

  4. Sådan redigeres MySQL my.cnf-filen