2010-01-13 15 views
6

así que tengo esta tabla con una clave compuesta, básicamente, 'ID de usuario' - 'datos' debe ser único (ver mi otra pregunta SQL table - semi-unique row?)clave compuesta condicional en MySQL?

Sin embargo, me preguntaba si era posible hacer esto sólo entra en vigor cuando el ID de usuario no es cero Con eso quiero decir, 'ID de usuario': 'datos' debe ser exclusivo para ID de usuario distintos de cero.

¿O estoy ladrando en el árbol equivocado?

Gracias
Mala

Respuesta

5

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'); 
+0

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

Cuestiones relacionadas