Tengo una columna de correo electrónico que quiero ser única. Pero también quiero que acepte valores nulos. ¿Puede mi base de datos tener 2 correos electrónicos nulos de esa manera?
Tengo una columna de correo electrónico que quiero ser única. Pero también quiero que acepte valores nulos. ¿Puede mi base de datos tener 2 correos electrónicos nulos de esa manera?
Respuestas:
Sí, MySQL permite múltiples NULL en una columna con una restricción única.
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;
Resultado:
x
NULL
NULL
1
Esto no es cierto para todas las bases de datos. SQL Server 2005 y versiones anteriores, por ejemplo, solo permiten un único valor NULL en una columna que tiene una restricción única.
WHERE column IS NOT NULLparece fallarme, ya que no es compatible con mi versión de MySQL. ¿Alguien sabe dónde podría mirar?
De los documentos :
"un índice ÚNICO permite múltiples valores NULL para columnas que pueden contener NULL"
Esto se aplica a todos los motores excepto BDB .
No estoy seguro si el autor originalmente solo preguntaba si esto permite o no valores duplicados o si hubo una pregunta implícita aquí preguntando, "¿Cómo permitir NULLvalores duplicados mientras se usa UNIQUE?" O "¿Cómo permitir solo un UNIQUE NULLvalor?"
La pregunta ya ha sido respondida, sí, puede tener NULLvalores duplicados mientras usa el UNIQUEíndice.
Como me topé con esta respuesta mientras buscaba "cómo permitir un UNIQUE NULLvalor". Para cualquier otra persona que pueda tropezar con esta pregunta mientras hace lo mismo, el resto de mi respuesta es para usted ...
En MySQL no puede tener un UNIQUE NULLvalor, sin embargo, puede tener un UNIQUEvalor vacío insertando con el valor de una cadena vacía.
Advertencia: los valores numéricos y distintos de cadenas pueden tener un valor predeterminado de 0 u otro valor predeterminado.
UNIQUErestricción sino por la NOT NULLrestricción. Creo que esta respuesta es irrelevante para la pregunta porque la pregunta es específicamente sobre el comportamiento de la UNIQUErestricción.
Evite restricciones únicas anulables. Siempre puede colocar la columna en una nueva tabla, hacerla no nula y única y luego llenar esa tabla solo cuando tenga un valor para ella. Esto asegura que cualquier dependencia clave en la columna se pueda aplicar correctamente y evita cualquier problema que pueda ser causado por nulos.