Может ли unique key иметь значение null

«Может ли unique key иметь значение null» — вопрос из категории Базы данных, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, уникальный ключ (unique key) в MySQL может содержать значение NULL. Однако есть нюанс: уникальный ключ допускает несколько записей с NULL, так как NULL не считается равным другому NULL (сравнение NULL = NULL возвращает NULL, а не true).

Пример:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    email VARCHAR(255) UNIQUE
);

INSERT INTO users (email) VALUES (NULL); -- OK
INSERT INTO users (email) VALUES (NULL); -- OK, так как NULL != NULL

Если нужно запретить дублирование NULL, можно использовать NOT NULL в сочетании с UNIQUE:

ALTER TABLE users MODIFY email VARCHAR(255) NOT NULL UNIQUE;

В других СУБД (PostgreSQL, SQLite) поведение может отличаться.