Antwort #91 am: 21. Dezember 2020, 16:13:14
Ganz so einfach ist das nicht zu beantworten.
Was mir zuerst auffällt ist, daß
tracking_id wahrscheinlich ein INT mit einem AUTO_INCREMENT ist.
In einem solchen Fall lässt man das Feld bei INSERT weg oder übergibt NULL. Ein leerer String, wie in deinem Beispiel,
Schreinermeister, funktioniert zwar gibt jedoch einen Fehler aus. Es ist anzunehmen, daß das in zukünftigen MySQL-Versionen gar nicht mehr funktioniert.
Zu den in
oneQs Link aufgezählten Möglichkeiten:
- ist REPLACE INTO generell nicht effektiv weil sehr langsam und resourcen-aufwändig, denn im Hintergrund werden betroffenen Zeilen gelöscht und dann neu eingefügt. Dies hat ein komplettes Neuschreiben aller Indexe zur Folge.
Außerdem wäre u.g. Voraussetzung dafür nötig. - INSERT IGNORE ist ein gangbarer Weg unter der u.g. Voraussetzung.
Das hängt davon ab, ob später erscheinende Werte aktueller sind und die älteren folglich überschreiben sollten. - ON DUPLICATE KEY UPDATE ist ebenfalls ein gangbarer Weg, unter der u.g. Voraussetzung.
Auch dieser Weg hängt davon ab, ob später erscheinende Werte aktueller sind und die älteren folglich überschreiben sollten.
Die oben bereits genannte Voraussetzung ist, daß
orders_id mit mindestens einem UNIQUE KEY, wenn nicht gar gleich mit dem PRIMARY KEY belegt werden sollte. Ich gehe davon aus, daß für jede Bestellung lediglich eine Tracking-Nummer vorhanden ist.
Ebenfalls gangbar wäre ein SELECT um herauszufinden, ob es bereits einen Eintrag gibt und davon abhängig ein INSERT, wenn nicht vorhanden oder eben ein UPDATE bzw. ein Ignorieren, abhängig von bereits o.g. Antwort auf die Frage ob spätere Daten aktueller sind.
Gruß,
noRiddle