Резюме :в този урок ще научите как да използвате SQLite UNIQUE
ограничение, за да се гарантира, че всички стойности в колона или група от колони са уникални.
Въведение в SQLite UNIQUE
ограничение
UNIQUE
ограничението гарантира, че всички стойности в колона или група колони са различни една от друга или уникални.
За да дефинирате UNIQUE
ограничение, използвате UNIQUE
ключова дума, последвана от една или повече колони.
Можете да дефинирате UNIQUE
ограничение на ниво колона или таблица. Само на ниво таблица можете да дефинирате UNIQUE
ограничение в множество колони.
По-долу е показано как да дефинирате UNIQUE
ограничение за колона на ниво колона:
CREATE TABLE table_name(
...,
column_name type UNIQUE,
...
);
Code language: SQL (Structured Query Language) (sql)
Или на ниво таблица:
CREATE TABLE table_name(
...,
UNIQUE(column_name)
);
Code language: SQL (Structured Query Language) (sql)
Следното илюстрира как да дефинирате UNIQUE
ограничение за множество колони:
CREATE TABLE table_name(
...,
UNIQUE(column_name1,column_name2,...)
);
Code language: SQL (Structured Query Language) (sql)
Веднъж UNIQUE
ограничението е дефинирано, ако се опитате да вмъкнете или актуализирате стойност, която вече съществува в колоната, SQLite ще издаде грешка и ще прекрати операцията.
SQLite UNIQUE
примери за ограничения
Нека вземем няколко примера за използване на UNIQUE
ограничение.
Дефиниране на UNIQUE
ограничение за пример за една колона
Следното изявление създава нова таблица с име contacts
с UNIQUE
ограничение, дефинирано за email
колона:
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)
Следният пример вмъква нов ред в contacts
таблица:
INSERT INTO contacts(first_name,last_name,email)
VALUES ('John','Doe','[email protected]');
Code language: SQL (Structured Query Language) (sql)
Ако се опитате да вмъкнете нов контакт със същия имейл, ще получите съобщение за грешка:
INSERT INTO contacts(first_name,last_name,email)
VALUES ('Johnny','Doe','[email protected]');
Code language: SQL (Structured Query Language) (sql)
Ето съобщението за грешка:
Error while executing SQL query on database 'chinook': UNIQUE constraint failed: contacts.email
Code language: SQL (Structured Query Language) (sql)
Дефиниране на UNIQUE
пример за ограничение за множество колони
Следното изявление създава shapes
таблица с UNIQUE
ограничение, дефинирано за background_color
и foreground_color
колони:
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)
Следното изявление вмъква нов ред в shapes
таблица:
INSERT INTO shapes(background_color,foreground_color)
VALUES('red','green');
Code language: SQL (Structured Query Language) (sql)
Следното изявление работи поради липса на нарушение на дублиране и в background_color
и foreground_color
колони:
INSERT INTO shapes(background_color,foreground_color)
VALUES('red','blue');
Code language: SQL (Structured Query Language) (sql)
Следното изявление обаче причинява грешка поради дубликатите и в background_color
и foreground_color
колони:
INSERT INTO shapes(background_color,foreground_color)
VALUES('red','green');
Code language: SQL (Structured Query Language) (sql)
Ето грешката:
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
ограничение и NULL
SQLite третира всички NULL стойности са различни, следователно колона с UNIQUE
ограничението може да има множество NULL стойности.
Следното изявление създава нова таблица с име lists
чийто email
колоната има UNIQUE
ограничение:
CREATE TABLE lists(
list_id INTEGER PRIMARY KEY,
email TEXT UNIQUE
);
Code language: SQL (Structured Query Language) (sql)
Следното изявление вмъква множество NULL стойности в email
колона от lists
таблица:
INSERT INTO lists(email)
VALUES(NULL),(NULL);
Code language: SQL (Structured Query Language) (sql)
Нека да потърсим данни от lists
таблица:
SELECT * FROM lists;
Code language: SQL (Structured Query Language) (sql)
Ето изхода:
Както можете да видите, въпреки че колоната за имейл има UNIQUE
ограничение, може да приеме множество NULL стойности.
В този урок научихте как да използвате SQLite UNIQUE
ограничение, за да се гарантира, че всички стойности в колона или група от колони са уникални.