У меня есть столбец электронной почты, который я хочу быть уникальным. Но я также хочу, чтобы он принимал нулевые значения. Может ли моя база данных иметь 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ограничения.
Избегайте обнуляемых уникальных ограничений. Вы всегда можете поместить столбец в новую таблицу, сделать его ненулевым и уникальным, а затем заполнить эту таблицу только тогда, когда у вас есть для нее значение. Это гарантирует, что любая зависимость ключа от столбца может быть корректно применена, и позволяет избежать любых проблем, которые могут быть вызваны пустыми значениями.