MySQL INSERT falls nicht vorhanden (nicht mit Primärschlüssel)

8

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

%Vor%

Tabelle sieht wie folgt aus:

%Vor%     
t q 06.07.2012, 20:14
quelle

4 Antworten

11

1) Können Sie eine UNIQUE Einschränkung für (myid, theirid) hinzufügen? Wenn ja, füge diese Einschränkung hinzu und verwende:

%Vor%

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%     
ypercubeᵀᴹ 06.07.2012, 20:38
quelle
1

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

%Vor%

so hat es "nichts" gemacht. Wenn Sie wissen möchten, ob der Wert existiert, sollten Sie vor dem Einfügen eine Select-Anweisung verwenden.

    
jcho360 06.07.2012 20:29
quelle
1

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

wollen

aber ich bin mir nicht sicher über die Syntax, also schau einfach nach, aber es sieht so aus ...

%Vor%     
Pere Noel 07.08.2013 17:13
quelle
0

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.

    
Battle_707 06.07.2012 20:27
quelle

Tags und Links