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 NULL
parece 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 NULL
valores duplicados mientras se usa UNIQUE
?" O "¿Cómo permitir solo un UNIQUE
NULL
valor?"
La pregunta ya ha sido respondida, sí, puede tener NULL
valores duplicados mientras usa el UNIQUE
índice.
Como me topé con esta respuesta mientras buscaba "cómo permitir un UNIQUE
NULL
valor". 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
NULL
valor, sin embargo, puede tener un UNIQUE
valor 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.
UNIQUE
restricción sino por la NOT NULL
restricción. Creo que esta respuesta es irrelevante para la pregunta porque la pregunta es específicamente sobre el comportamiento de la UNIQUE
restricció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.