J'ai une table avec deux valeurs int qui sont des ID. À eux seuls, ces ID peuvent apparaître autant de fois que nécessaire dans la table, mais ensemble, ils ne doivent apparaître qu'une seule fois.
Est-il possible de rendre une paire de valeurs unique tout en permettant aux valeurs individuelles de s'afficher plusieurs fois?
En guise de suivi, si cela est possible, la paire de valeurs peut-elle être utilisée comme clé? J'ai actuellement une 3ème colonne pour une valeur d'incrémentation automatique unique pour ma clé.
C'est ce qu'on appelle une clé composite.
Si vous souhaitez modifier votre PK réelle en une clé composite, utilisez
Alter table <your table> drop PRIMARY KEY;
Alter table <your table> drop COLUMN <your autoincremented column>;
Alter table <your table> add [constraint <constraint name>] PRIMARY KEY (<col1>, <col2>);
Vous pouvez également simplement ajouter une contrainte unique (votre PK sera la même, et les paires uniques ... devront être uniques).
alter table <your table> add [constraint <constraint name>] unique index(<col1>, <col2>);
Personnellement, je recommanderais la deuxième solution (PK simple + contrainte unique), mais ce n’est qu’un point de vue personnel. Vous pouvez rechercher des arguments pour et contre sur les clés composites sur Google.
La partie entre []
est optionnelle.
MODIFIER
Si vous voulez faire cela dans l'instruction create table
Pour un pk composite
CREATE TABLE Test(
id1 int NOT NULL,
id2 int NOT NULL,
id3 int NOT NULL,
PRIMARY KEY (id1, id2)
);
Pour un index unique
CREATE TABLE Test1(
id1 int NOT NULL AUTO_INCREMENT,
id2 int NOT NULL,
id3 int NOT NULL,
PRIMARY KEY (id1),
UNIQUE KEY (id2, id3)
);
Essayez ceci: ALTER TABLE table_name ADD CONSTRAINT uc_name UNIQUE (col1,col2)
ajoutez primary key (col1, col2)
à votre définition de table de création