Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: MySQL Rätsel - mitmachen und was dabei lernen

    Q

    • Fördermitglied
    • Beiträge: 1.531
    Re: MySQL Rätsel - mitmachen und was dabei lernen
    Antwort #90 am: 21. Dezember 2020, 15:45:51
    Tendenziell falscher Thread.
    Meine Internetrecherche war bisher nicht zielführend oder gar verwirrend.   :crazy:
    Nach 2 Minuten habe ich das gefunden: https://www.delftstack.com/de/howto/mysql/mysql-insert-if-not-exists/. Und so etwas hat nicht geholfen?

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.988
    • Geschlecht:
    Re: MySQL Rätsel - mitmachen und was dabei lernen
    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
    9 Antworten
    2115 Aufrufe
    27. Dezember 2022, 13:02:52 von lachralle
    10 Antworten
    5218 Aufrufe
    25. September 2011, 17:53:01 von h-h-h
    5 Antworten
    4440 Aufrufe
    26. Februar 2012, 13:11:38 von Webcom
    7 Antworten
    6341 Aufrufe
    21. April 2012, 18:07:41 von Sick