У мене є стовпець електронної пошти, який хочу бути унікальним. Але я також хочу, щоб він приймав нульові значення. Чи може така база даних мати 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обмеження.
Уникайте унікальних обмежень. Ви завжди можете помістити стовпець у нову таблицю, зробити її ненульовою та унікальною, а потім заповнити цю таблицю лише тоді, коли для неї є значення. Це гарантує, що будь-яку ключову залежність від стовпчика можна правильно застосувати та уникне будь-яких проблем, які можуть бути викликані нулями.