Qu'est-ce qu'un indice unique ?
Un index unique sur une colonne est un index sur cette colonne qui applique également la contrainte selon laquelle vous ne pouvez pas avoir deux valeurs égales dans cette colonne sur deux lignes différentes. Exemple :
CREATE TABLE table1 (foo int, bar int);
CREATE UNIQUE INDEX ux\_table1\_foo ON table1(foo); -- Create unique index on foo.
INSERT INTO table1 (foo, bar) VALUES (1, 2); -- OK
INSERT INTO table1 (foo, bar) VALUES (2, 2); -- OK
INSERT INTO table1 (foo, bar) VALUES (3, 1); -- OK
INSERT INTO table1 (foo, bar) VALUES (1, 4); -- Fails!
Duplicate entry '1' for key 'ux\_table1\_foo'
La dernière insertion échoue car elle viole l'index unique sur la colonne foo
lorsqu'il tente d'insérer la valeur 1 dans cette colonne pour la deuxième fois.
Dans MySQL, une contrainte unique autorise plusieurs NULL.
Il est possible de créer un index unique sur plusieurs colonnes.
Clé primaire et index unique
Les choses qui sont les mêmes :
- Une clé primaire implique un index unique.
Les choses qui sont différentes :
- Une clé primaire implique également NOT NULL, mais un index unique peut être nullable.
- Il ne peut y avoir qu'une seule clé primaire, mais il peut y avoir plusieurs index uniques.
- Si aucun index groupé n'est défini, la clé primaire sera l'index groupé.
2 votes
D'autres considérations sont abordées ici (mais dans le contexte supplémentaire d'un indice de couverture). dba.stackexchange.com/questions/21554/
0 votes
REMARQUE : SQLite est différent en ce sens qu'il autorise les clés primaires à être nulles, ce qui va à l'encontre de la norme commune pour des raisons d'héritage. sqlite.org/lang_createtable.html