Pregunta

Así que tengo esta tabla con una clave compuesta, básicamente, 'ID de usuario' - 'datos' debe ser único (ver mi otra pregunta tabla de SQL - fila única semi-)

Sin embargo, me preguntaba si era posible hacer esto sólo entrará en vigor cuando identificación de usuario no es cero? Con esto quiero decir, 'ID de usuario' - 'datos' debe ser único para los ID de usuario que no son cero

?

O estoy ladrando al árbol equivocado?

Gracias
Mala

¿Fue útil?

Solución

limitaciones de SQL se aplican a todas las filas de la tabla. No se puede hacerlos condicional basada en ciertos valores de datos.

Sin embargo, si usted podría utilizar NULL en lugar de cero, puede moverse por la restricción única. Una restricción único permite múltiples entradas que han NULL. La razón es que la singularidad significa que no hay dos valores iguales puede existir. La igualdad significa value1 = value2 debe ser cierto. Pero en SQL, NULL = NULL es desconocida , no es cierto.

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');
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top