Schauen Sie sich die folgende sqlfiddle an: 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) ;
Ich habe eine grundlegende Kontakttabelle. Die Felder network_id
und network_contact_id
enthalten ID-Nummern, die mit anderen Tabellen verknüpft sind.
Ich möchte INSERT IGNORE
Abfragen für diese Tabelle ausführen können , aber ich möchte die Kombination von network_id
und network_contact_id
als eindeutigen Schlüssel verwenden, mit dem abgeglichen werden soll.
Wenn ich beispielsweise versuchte, einen Kontakt mit network_id = 4
und einzufügen network_contact_id = 12
, sah die INSERT IGNORE
Abfrage, dass der Eintrag bereits vorhanden ist, und ignorierte alle ausgelösten Fehler.
Also im Grunde network_id
ist nicht einzigartig. network_contact_id
ist nicht einzigartig. Aber die Kombination der beiden ist einzigartig. Wie richte ich das ein? Müsste ich ein anderes Feld haben, das den verketteten Werten der beiden anderen Felder entspricht? Oder gibt es eine Möglichkeit, die Schlüssel für diese Tabelle so einzurichten, dass sie das tut, was ich brauche?
quelle
id
Feld als Primärschlüssel beizubehalten, wenn diesesunique key
Element jetzt festgelegt ist?Ändern Sie die Definition der Tabelle, indem Sie
UNIQUE KEY
der Kombination der beiden Spalten eine Einschränkung hinzufügen :Sie sollten auch diese Antwort von Bill Karwin überprüfen auf die Unterschiede zwischen
INSERT IGNORE
,REPLACE
undINSERT ... ON DUPLICATE KEY UPDATE
quelle