MySQL игнорирует нулевые значения в уникальных ограничениях? - PullRequest
238 голосов
/ 14 сентября 2010

У меня есть столбец электронной почты, который я хочу быть уникальным.Но я также хочу, чтобы он принимал нулевые значения.Может ли моя база данных иметь 2 пустых сообщения таким образом?

Ответы [ 4 ]

351 голосов
/ 14 сентября 2010

Да, 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 в столбце с уникальным ограничением.

100 голосов
/ 14 сентября 2010

С документы :

"индекс UNIQUE разрешает несколько значений NULL для столбцов, которые могут содержать NULL"

Это относится ко всемдвигатели но BDB .

6 голосов
/ 23 ноября 2016

Я не уверен, изначально ли автор просто спрашивал, допускает ли это дублирующиеся значения или здесь подразумевался вопрос: «Как разрешить дублирование значений NULL при использовании UNIQUE?»Или «Как разрешить только одно значение UNIQUE NULL

На вопрос уже дан ответ, да, вы можете иметь дублирующиеся значения NULL при использовании индекса UNIQUE.

Так как я наткнулся на этот ответ при поиске «как разрешить одно UNIQUE NULL значение».Для всех, кто может наткнуться на этот вопрос, делая то же самое, остальная часть моего ответа для вас ...

В MySQL вы не можете иметь одно значение UNIQUE NULL, однако вы можете иметьодно UNIQUE пустое значение путем вставки со значением пустой строки.

Предупреждение. Числа и типы, отличные от строки, могут по умолчанию принимать значение 0 или другое значение по умолчанию.

5 голосов
/ 14 сентября 2010

Избегайте обнуляемых уникальных ограничений. Вы всегда можете поместить столбец в новую таблицу, сделать его ненулевым и уникальным, а затем заполнить эту таблицу только тогда, когда у вас есть для нее значение. Это гарантирует, что любая зависимость ключа от столбца может быть правильно применена, и позволяет избежать проблем, которые могут быть вызваны пустыми значениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...