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