2016-08-05 9 views
0

Ich möchte Werte einfügen, und wenn es vorhanden ist "einfügen .. auf doppelte Update" wird es aktualisieren, aber es wird Autoincrement val nicht mit neu eingefügten one.Ich habe gehört, dass einfügen auf doppeltem Update hat einige Fehler, die es immer neue ID erzeugen und wenn es vorhanden ist, wird es löschen, aber ich möchte genau diese gelöschte ID erhalten. (Wenn ich last_inserted_id verwende, gebe ich die letzte ID der aktualisierten Spalte zurück, die nicht neu eingefügt wurde) will ID mit neu eingefügten Abfrage aktualisieren sollte wie folgt: einfügen, wenn vorhanden löschen eins und einfügen neues (mit automatischer Erhöhung) .Ich habe gehört, dass es ersetzen, aber es ist so langsam, und ich möchte nur ID mit neu eingefügten ID aktualisieren .Insert auf doppelte Update erhalten "neue" generierte ID

+0

Dann tun Sie dies in zwei Schritten. Sie wollen eine echte "löschen" gefolgt von einer "einfügen". Das ist nicht "bei doppelter Schlüsselaktualisierung". –

+0

@GordonLinoff Aber ich habe gehört, dass insert und auch löschen ist langsamer als einfügen ... duplicate update –

+0

@GordonLinoff sollte ich löschen und dann einfügen oder gibt es andere Möglichkeit? Ich brauche nur neue Werte mit neuen ID –

Antwort

0

Mit Respekt, Sie spielen mit dem Feuer, wenn Sie versuchen, ausgefallene Update-Logik mit Autoinkrement Spalten durchzuführen.

Wenn Sie beim Aktualisieren eine neue Autoinkrement-ID in einer Zeile benötigen, löschen Sie einfach die alte Zeile und fügen Sie die neue ein, wie Gordon sagte.

Unter einigen Datenbank-Workloads, die möglicherweise etwas langsamer als mit insert on duplicate key update sind. Aber wenn Ihre Tabelle nicht mindestens 100 Megarows enthält oder wenn Sie mindestens 10 dieser Operationen pro Sekunde den ganzen Tag und die ganze Nacht ausführen, ist der Leistungsunterschied trivial. Wenn Sie über diese Art von Datenbankgröße oder Arbeitslast verfügen, wenden Sie sich an Ihren Datenbankadministrator.

REPLACE = DELETE, dann INSERT. IODKU löscht nie. In jeder Spalte müssen Sie die Spalten eines Schlüssels eingeben, damit er weiß, mit welcher Zeile er arbeiten soll. Ein subtiler Punkt: Wenn mehrere Schlüssel UNIQUE vorhanden sind, kann REPLACE mehrere Zeilen löschen, dann fügen Sie nur einen ein.

IODKU kann die ID (entweder vorhanden oder neu) mithilfe von ... UPDATE id = LAST_INSERT_ID(id), ... abrufen.

+0

Ok Ich werde das tun, aber ich möchte lernen, welche Fälle auf Duplikat ist langsamer als löschen und einfügen? –

+0

'REPLACE' muss mehr arbeiten, daher ist es wahrscheinlich immer langsamer. Ich habe der Antwort einige weitere Informationen hinzugefügt. –

+0

Sie sagten, LAST_INSERTED_ID Ich möchte etwas wie diese ID mit der letzten update, die von "INSERT ... auf doppelte Update" generiert wird, aber es gab mir id der aktualisierten elem (alt) –

Verwandte Themen