Ответ
Ограничение UNIQUE в SQL гарантирует, что все значения в указанном столбце (или комбинации столбцов) таблицы будут различными. Его основная задача — обеспечить целостность данных, предотвращая дублирование.
Синтаксис и пример:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
email VARCHAR(255) UNIQUE, -- Не может быть двух одинаковых email
username VARCHAR(50) UNIQUE NOT NULL
);
-- Или для составного уникального ключа:
CREATE TABLE subscriptions (
user_id INT,
course_id INT,
UNIQUE(user_id, course_id) -- Пользователь не может быть подписан на курс дважды
);
При попытке вставить или обновить строку, нарушающую ограничение, СУБД выбросит ошибку.
Сравнение UNIQUE и PRIMARY KEY:
| Критерий | PRIMARY KEY |
UNIQUE |
|---|---|---|
| Количество в таблице | Только один. | Много. |
| Значения NULL | Запрещены. Столбец NOT NULL. |
Разрешены (в большинстве СУБД, например, PostgreSQL, MySQL). Но NULL считается уникальным, поэтому может быть много строк с NULL. |
| Индексы | Создает кластеризованный (часто) или некластеризованный индекс. | Создает некластеризованный индекс для быстрой проверки уникальности. |
| Семантика | Главный идентификатор строки. | Обеспечение уникальности бизнес-данных. |
Практическое применение:
- Электронная почта, логин, номер паспорта в таблице пользователей.
- Артикул товара в каталоге.
- Предотвращение дублей в связующих таблицах (как в примере с подписками).