"ERSETZEN Sie IN" versus EINFÜGEN [WENN]
Gut, ich habe eine Frage, die nicht wirklich ein Problem.
Habe ich eine Tabelle in meine Datenbank, ziemlich klein, nur 3 Spalten, aber Potenzial zu wachsen. Ich habe zwei Lösungen für mein problem, aber nicht sicher, warum die eine oder die andere.
Habe ich ein Stück von Daten, die möglicherweise oder möglicherweise nicht bereits in der Datenbank. Zwei Möglichkeiten, um dieses Problem zu lösen. Ich habe die eindeutige ID, so ist es leicht zu überprüfen.
- Überprüfen, ob die Datensätze in der Datenbank existiert, und wenn nicht,
INSERT INTO
Datenbank - Verwenden
REPLACE INTO
, denn ich habe die ID bereits.
Meine Frage ist jetzt. Welches ist besser zu bedienen. Was sind die vor-und Nachteile, entweder unter Verwendung der Ergebnisse der 2. Oder gibt es ein besseres Ergebnis?
Einen Hinweis, die Daten exakt die gleichen sind, so gibt es keine chance der Datensatz wird aktualisiert, mit einem neuen Wert. So ist die REPLACE INTO
wird das einfügen von Daten, die bereits vorhanden ist.
- Watch out,
REPLACE INTO
umgesetzt wird intern alsDELETE
und dann einINSERT
. Das löschen ist eine normale löschen, was bedeutet, es wird geprüft, Fremdschlüssel und gehorchenON DELETE
Klauseln. Sie wollen wahrscheinlichINSERT INTO ... ON DUPLICATE KEY UPDATE ...
statt sowieso. - Aber, was ist die best practice hier? Und warum
- Darüber hinaus, wenn Sie versuchen, eine Zeile zu aktualisieren mit dem gleichen (vorhandenen) Werte, MySQL erkennt, dass die Werte identisch sind und überspringt das update, Zeit zu sparen, sperren, etc.--ein weiterer Grund für die Verwendung
INSERT INTO...ON DUPLICATE KEY UPDATE...
versus löschen die vorhandene Zeile zuerst. - möglich, Duplikat der Einfügen in eine mysql-Tabelle und overwritng alle aktuellen Daten
Du musst angemeldet sein, um einen Kommentar abzugeben.
REPLACE INTO
wird nicht empfohlen, hier - Sie nicht wirklich brauchen, etwas zu ersetzen. Es tutDELETE
gefolgt vonINSERT
mit allen Konsequenzen. Zum Beispiel alle Indizes aktualisiert werden müssen, das führt zu unnötiger Arbeit und index-Fragmentierung, wenn Sie es verwenden Häufig.Auf der anderen Seite gibt es
ON DUPLICATE KEY UPDATE
, die hauptsächlich für die Zähler, aber Sie nicht aktualisieren Sie Ihre Zeile mit Schritten oder anderen Wert ändert, so dass Sie verwenden würde komisch syntax wieSET id=id
oder etwas ähnliches.Prüfen, ob der Datensatz in der Datenbank vorhanden ist, wäre die beste Lösung für Sie, aber statt mit einer anderen Abfrage, lassen mysql zu tun, dass für Sie prüfen und verwenden:
Diese Weise, wenn Sie versuchen, einfügen einer Zeile mit duplizierten unique-oder primary key-es wird nicht einfach eingefügt werden, ohne dass irgendwelche Fehler. Beachten Sie die Nebenwirkung möglicherweise fehlen andere Fehlermeldungen, aber wenn Sie genau wissen, was Sie einfügen, Sie sollten in Ordnung sein.