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.