SQL уникальные ограничения - мощный инструмент для поддержания целостности данных в базах данных. Давайте разберемся, как применять их на практике.
Основы unique constraint в SQL
Unique constraint (уникальное ограничение) в SQL - это правило, применяемое к столбцу или группе столбцов таблицы, которое гарантирует уникальность значений в этих столбцах.
Определение и назначение
Главная цель unique constraint - не допустить повторений одинаковых данных в выбранных столбцах таблицы. Это позволяет сохранить целостность базы данных и избежать дублирования и противоречивой информации.
Уникальные ограничения часто используются для таких столбцов, как идентификаторы пользователей, email-адреса, номера телефонов и другие данные, которые должны быть уникальными для каждой записи.
В отличие от первичных ключей (primary key), которые также обеспечивают уникальность, в таблице может быть только один первичный ключ, а unique constraints можно определять для нескольких столбцов или их комбинаций.
Как unique constraint предотвращает дублирование данных
При добавлении unique constraint система управления базами данных (СУБД) автоматически контролирует вставку и обновление данных в таблице, не допуская нарушения ограничения.
Проверка при вставке и обновлении строк
При попытке вставить строку, содержащую уже существующее значение в столбцах с ограничением unique, или обновить строку, устанавливая дублирующееся значение, СУБД выдаст ошибку и не допустит операцию.
Автоматическое создание индекса
Чтобы ускорить проверку уникальности, СУБД автоматически создает уникальный индекс по столбцам с ограничением. Это позволяет быстрее находить дубликаты.
Синтаксис создания
Unique constraint можно определить двумя способами:
- При создании таблицы с помощью оператора CREATE TABLE
- Для уже существующей таблицы через ALTER TABLE
При создании таблицы (CREATE TABLE)
Syntax:
CREATE TABLE table_name ( column1 datatype UNIQUE, column2 datatype, ... );
Либо:
CREATE TABLE table_name ( column1 datatype, column2 datatype, ... CONSTRAINT constraint_name UNIQUE (column1, column2) );
Для существующей таблицы (ALTER TABLE)
Syntax:
ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE (column1, column2);
Рассмотрим несколько практических примеров применения уникальных ограничений.
Для столбца email пользователей
CREATE TABLE users ( id INT PRIMARY KEY, fullname VARCHAR(100), email VARCHAR(100) UNIQUE );
Здесь для столбца email в таблице пользователей users определено unique constraint, запрещающее дублирование email адресов.
Для сочетания столбцов
CREATE TABLE articles ( user_id INT, article_name VARCHAR(100), CONSTRAINT unique_per_user UNIQUE (user_id, article_name) );
В данном случае уникальным должно быть сочетание столбцов user_id и article_name, то есть один пользователь может иметь только уникальные названия статей.
Как видим, возможности применения довольно широкие.
Особенности по сравнению с первичными ключами
Несмотря на схожесть функций, между unique constraints и первичными ключами (primary key) есть несколько отличий:
- В таблице может быть только один primary key, а unique constraints можно определять для нескольких столбцов или их комбинаций
- Столбцы primary key не могут содержать NULL значения, а в столбцах с unique constraint допускается одно NULL значение
- Обычно primary key используется для идентификации каждой строки, а unique constraints - для значимых бизнес-данных вроде email
Таким образом, уникальные ограничения - универсальный и гибкий инструмент поддержания целостности данных в SQL.