2009-06-04 3 views
0

Je suis relativement nouveau à MySQL, et je me demandais s'il était possible d'empêcher les entrées en double dans un tableau pivot/mapping qui n'a pas de clé primaire et une relation many-to-many. Un exemple simple:Existe-t-il un moyen d'empêcher les entrées en double dans un pivot/mappage de table?

table 1 
table1ID 
field 
field 

table 2 
table2ID 
field 
field 

pivot table 
table1ID 
table2ID 

Depuis plusieurs-à-plusieurs signifierait qu'une [seule] clé primaire ne peut pas être utilisé, est-il une manière concise (1-2 requêtes) pour éviter une entrée en double (même table1ID, paire tableID) d'être ajouté?

Éditer: Évidemment, cela peut être fait par un SELECT et une boucle dans les résultats, mais non seulement c'est un appel supplémentaire, mais il y a une boucle supplémentaire.

Répondre

1

Le tableau croisé dynamique devrait avoir une clé primaire des deux colonnes:

PRIMARY KEY(table1ID, table2ID) 

ce qui accélère et garantit l'unicité des recherches. Vous pouvez également ajouter une clé UNIQUE dans l'autre sens (table2ID, table1ID)

+0

Juste pour clarifier, UPDATE ON DUPLICATE KEY s'appliquerait-il si les deux sont des clés primaires? – user117046

+0

Vous ne savez pas ce que vous voulez dire. L'instruction ci-dessus signifie que la clé primaire est en fait la concaténation des deux éléments (sorta), donc si l'un est différent, alors il ne va pas entrer en collision sur l'unicité –

+0

Apparemment, Oui. http://lists.evolt.org/archive/Week-of-Mon-20000828/016482.html – user117046

Questions connexes