У мене є стовпець електронної пошти, який хочу бути унікальним. Але я також хочу, щоб він приймав нульові значення. Чи може така база даних мати 2 нульові електронні листи?
У мене є стовпець електронної пошти, який хочу бути унікальним. Але я також хочу, щоб він приймав нульові значення. Чи може така база даних мати 2 нульові електронні листи?
Відповіді:
Так, MySQL дозволяє кілька NULL в стовпці з унікальним обмеженням.
CREATE TABLE table1 (x INT NULL UNIQUE);
INSERT table1 VALUES (1);
INSERT table1 VALUES (1); -- Duplicate entry '1' for key 'x'
INSERT table1 VALUES (NULL);
INSERT table1 VALUES (NULL);
SELECT * FROM table1;
Результат:
x
NULL
NULL
1
Це не стосується всіх баз даних. Наприклад, SQL Server 2005 і пізніші версії дозволяє лише одне значення NULL у стовпці, що має унікальне обмеження.
WHERE column IS NOT NULL
здається, не виходить з ладу, оскільки це не підтримується в моїй версії MySQL. Хто-небудь знає, де я міг шукати?
З документів :
"індекс UNIQUE дозволяє декілька значень NULL для стовпців, які можуть містити NULL"
Це стосується всіх двигунів, крім BDB .
Я не впевнений, що автор спочатку просто запитував, чи дозволяє це повторювати значення чи ні тут мається на увазі запитання: "Як дозволити повторювані NULL
значення під час використання UNIQUE
?" Або "Як дозволити лише одне UNIQUE
NULL
значення?"
На питання вже відповіли, так, ви можете мати повторювані NULL
значення під час використання UNIQUE
індексу.
Оскільки я натрапив на цю відповідь, шукаючи "як дозволити одне UNIQUE
NULL
значення". Для всіх, хто може спіткнутися з цим питанням, роблячи те саме, решта моєї відповіді - для вас ...
У MySQL не може бути одного UNIQUE
NULL
значення, однак ви можете мати одне UNIQUE
порожнє значення, вставивши зі значенням порожнього рядка.
Попередження: Числові та інші типи, крім рядка, можуть мати значення 0 або інше значення за замовчуванням.
UNIQUE
обмеження, а через NOT NULL
обмеження. Я вважаю, що ця відповідь не має значення для питання, оскільки питання стосується конкретно поведінки UNIQUE
обмеження.
Уникайте унікальних обмежень. Ви завжди можете помістити стовпець у нову таблицю, зробити її ненульовою та унікальною, а потім заповнити цю таблицю лише тоді, коли для неї є значення. Це гарантує, що будь-яку ключову залежність від стовпчика можна правильно застосувати та уникне будь-яких проблем, які можуть бути викликані нулями.