Как работает ограничение UNIQUE в реляционных базах данных?

«Как работает ограничение UNIQUE в реляционных базах данных?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Ограничение UNIQUE в SQL гарантирует уникальность всех не-NULL значений в указанном столбце или группе столбцов (составной ключ) таблицы. Это ограничение целостности данных, предотвращающее дублирование.

Синтаксис и применение:

-- При создании таблицы
CREATE TABLE Users (
    id INT PRIMARY KEY,
    email VARCHAR(255) UNIQUE, -- Один столбец
    username VARCHAR(100) NOT NULL UNIQUE,
    CONSTRAINT uc_name_domain UNIQUE (username, domain) -- Составной ключ
);

-- Добавление к существующей таблице
ALTER TABLE Users ADD CONSTRAINT uc_email UNIQUE (email);

Ключевые особенности:

  • NULL значения: Столбец с UNIQUE может содержать многочисленные NULL-значения (если иное не указано NOT NULL), так как NULL не считается равным другому NULL в контексте сравнения на уникальность.
  • Индексы: Для обеспечения уникальности СУБД автоматически создает уникальный индекс по указанным столбцам, что также ускоряет поиск.
  • Отличие от PRIMARY KEY: В таблице может быть несколько UNIQUE ограничений, но только один PRIMARY KEY, который также подразумевает NOT NULL.