contraintes SQL appliquent à chaque ligne de la table. Vous ne pouvez pas les conditionner en fonction de certaines valeurs de données. Cependant, si vous pouviez utiliser NULL
au lieu de zéro, vous pouvez contourner la contrainte unique. Une contrainte unique permet plusieurs entrées ayant NULL
. La raison en est que l'unicité signifie qu'il n'y a pas deux valeurs égales peuvent exister. L'égalité signifie value1 = value2
doit être vrai. Mais en SQL, NULL = NULL
est inconnu, pas vrai.
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');
Jusqu'à présent, si bien, maintenant, vous pourriez penser que les déclarations suivantes violeraient la contrainte unique, mais ils ne le font pas:
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');
génial, merci! Comme je l'ai dit, j'ai utilisé une solution différente, mais vous m'avez donné une réponse parfaite à ma question et je l'utiliserai sans doute dans le futur =) – Mala