Wie kann ich in eine Zeile einfügen, wenn das Paar nicht existiert?
* HINWEIS, das sind keine Primärschlüssel, mein primärer KEY ist auf automatisches Inkrementieren eingestellt
versuchte Einfügen ignoriere, aber nicht funktioniert
Tabelle sieht wie folgt aus:
%Vor% 1) Können Sie eine UNIQUE
Einschränkung für (myid, theirid)
hinzufügen? Wenn ja, füge diese Einschränkung hinzu und verwende:
und ignorieren Sie die Produktwarnungen (oder ersetzen Sie die obigen mit INSERT IGNORE
)
2) Wenn Sie eine solche Einschränkung nicht hinzufügen können (z. B. wenn Sie solche Duplikate manchmal zulassen möchten und andere nicht), können Sie Folgendes verwenden:
%Vor% Ich denke du bist dir nicht sicher über das auf Duplikat ....
Die Idee, es zu benutzen ist, wenn das Feld es dupliziert, ersetzen Sie das alte für ein neues oder ändern Sie einfach den Primärschlüssel, um es EINZIGARTIG zu machen ... Sie können das on duplicate do nothing
nicht tun, weil es standardmäßig nichts tut Es wird nicht eingefügt. Schau doch hier
so hat es "nichts" gemacht. Wenn Sie wissen möchten, ob der Wert existiert, sollten Sie vor dem Einfügen eine Select-Anweisung verwenden.
Duplicate exeption (1062) wird nur auf Schlüsseln ausgelöst, wenn es als eindeutiges it dosent indiziert wird und die Exception auslöst, die durch "ON DUPLICATE KEY" (dh 1062) eingefangen wird.
Was Sie tun können, ist einen zusammengesetzten Schlüssel UNIQUE ( myid
, theirid
) hinzuzufügen, wenn Sie eine Ausnahme auslösen möchten, wenn beide togetter sind oder sie einfach als separate hinzufügen, wenn Sie entweder oder
aber ich bin mir nicht sicher über die Syntax, also schau einfach nach, aber es sieht so aus ...
%Vor%Abhängig davon, wie oft Sie diese Abfrage (und einige andere Umgebungselemente) ausführen, aber ich würde sagen, dass es sinnvoll wäre, einen eindeutigen Index für diese Felder zu erstellen. Auf diese Weise gibt mysql, wenn es sich um Duplikate handelt, einfach einen doppelten Fehlercode zurück und fügt ihn nicht zur Tabelle hinzu. Darüber hinaus wird diese Abfrage viel schneller ausgeführt, da sie nicht die gesamte Datenbank überprüfen muss, wenn die eingefügten Werte Duplikate sind.