limitaciones de SQL se aplican a todas las filas de la tabla. No puede hacer que sean condicionales en función de ciertos valores de datos.
Sin embargo, si puede usar NULL
en lugar de cero, puede evitar la restricción única. Una restricción única permite entradas múltiples que tienen NULL
. La razón es que la singularidad significa que no pueden existir dos valores iguales. La igualdad significa value1 = value2
debe ser verdadera. Pero en SQL, NULL = NULL
es desconocido, no es verdadero.
CREATE TABLE MyTable (id SERIAL PRIMARY KEY, userid INT, data VARCHAR(64));
INSERT INTO MyTable (userid, data) VALUES ( 1, 'foo');
INSERT INTO MyTable (userid, data) VALUES ( 1, 'bar');
INSERT INTO MyTable (userid, data) VALUES (NULL, 'baz');
Hasta aquí todo bien, ahora se podría pensar las siguientes declaraciones violaría la restricción única, pero no es así:
INSERT INTO MyTable (userid, data) VALUES ( 1, 'baz');
INSERT INTO MyTable (userid, data) VALUES (NULL, 'foo');
INSERT INTO MyTable (userid, data) VALUES (NULL, 'baz');
INSERT INTO MyTable (userid, data) VALUES (NULL, 'baz');
impresionante, gracias! Como dije, utilicé una solución diferente, pero me diste una respuesta perfecta a mi pregunta y, sin duda, la usaré en el futuro =) – Mala