Jetez un œil au sqlfiddle suivant: http://sqlfiddle.com/#!2/dacb5/1
CREATE TABLE contacts
(
id int auto_increment primary key,
name varchar(20),
network_id int,
network_contact_id int
);
INSERT INTO contacts
(name, network_id, network_contact_id)
VALUES
('John', 4, 10),
('Alex', 4, 11),
('Bob', 4, 12),
('Jeff', 4, 45),
('Bill', 7, 11),
('Walter', 7, 45),
('Jessie', 7, 360) ;
J'ai une table de base des contacts. Les champs network_id
et network_contact_id
contiennent des numéros d'identification liés à d'autres tables.
Je veux pouvoir exécuter des INSERT IGNORE
requêtes sur cette table, mais je veux utiliser la combinaison de network_id
et network_contact_id
comme clé unique pour la comparaison.
Ainsi, par exemple, si j'essayais d'insérer un contact qui avait network_id = 4
et network_contact_id = 12
, la INSERT IGNORE
requête verrait que l'entrée existe déjà et ignorerait toute erreur levée.
Donc, fondamentalement, ce network_id
n'est pas unique. network_contact_id
n'est pas unique. Mais la combinaison des deux est unique. Comment configurer cela? Dois-je avoir un seul autre champ qui correspond aux valeurs concaténées des deux autres champs? Ou existe-t-il un moyen de configurer les clés de cette table pour qu'elle fasse ce dont j'ai besoin?
la source
id
champ comme clé primaire si cetteunique key
chose est maintenant définie?Modifiez la définition de la table en ajoutant une
UNIQUE KEY
contrainte sur la combinaison des deux colonnes:Vous devriez également vérifier cette réponse de Bill Karwin sur les différences entre
INSERT IGNORE
,REPLACE
etINSERT ... ON DUPLICATE KEY UPDATE
la source