2012-04-05 7 views
3

Ich habe eine MySQL-Tabelle, die wie folgt aussieht: seinKann ich INSERT IGNORE mit mehreren Feldern als IGNORE-Qualifier in MySQL verwenden?

`id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
`company_id` int(8) unsigned NOT NULL, 
`term_type` varchar(255) NOT NULL DEFAULT '', 
`term` varchar(255) NOT NULL DEFAULT '', 

Ich möchte in der Lage sein, dies zu tun ...

INSERT IGNORE INTO table (company_id, term_type, term) 
VALUES(a_company_id, 'a_term_type', 'a_term') 

... aber ich möchte den Einsatz ignoriert, wenn die gleiche Kombination aus Firmen-ID, Term-Typ und Term bereits vorhanden ist. Ich bin mir bewusst, dass, wenn ich einen eindeutigen Index für ein einzelnes Feld habe, wenn ich versuche, einen doppelten Wert einzufügen, die Einfügung ignoriert wird. Gibt es eine Möglichkeit, die Combo zu machen, die ich versuche? Könnte ich einen mehrspaltigen Index verwenden?

Ich versuche zu vermeiden, eine SELECT vor jeder Einfügung für diese Kombination zu überprüfen. Während ich Hunderte von Millionen Datenzeilen in diese Tabelle verarbeite.

Antwort

4

Wenn Sie das IGNORE-Schlüsselwort verwenden, werden Fehler, die beim Ausführen der INSERT-Anweisung auftreten, stattdessen als Warnungen behandelt. Ohne IGNORE beispielsweise führt eine Zeile, die einen vorhandenen UNIQUE-Index oder PRIMARY KEY-Wert in der Tabelle dupliziert, zu einem Fehler mit doppelten Schlüsseln, und die Anweisung wird abgebrochen. Mit IGNORE wird die Zeile immer noch nicht eingefügt, aber es wird kein Fehler ausgegeben.

Also wenn Sie einen mehrspaltigen Primärschlüssel haben - es funktioniert.

3

Vielleicht so etwas wie folgt aus:

ALTER TABLE table ADD UNIQUE (company_id, term_type,term); 
Verwandte Themen