MySQL Daten aktualisieren

OnDemand

Top Contributor
Hallo zusammen,

gibt es eine Art empfohlene Vorgehensweise wie man Daten aktualisiert wenn es Änderungen in den Werten gibt?

Habe in einer Tabelle 15000 Datensätze. Muss ich jetzt erstmal alle Daten lesen, mit den neuen Daten vergleichen und bei Änderungen updaten oder gibt es eine elegantere Lösung? ?
 
Normalerweise sollte ein Datensatz einen PrimaryKey (meist eine ID, oder eine Kombination aus mehreren Werten) haben über welchen man diesen eindeutig identifizieren kann.
Jetzt stellt sich das Frage: Werden die Datensätze immer mit den neuen Werten geupdated oder gibt es auch Fälle wo es zwar neue Daten gibt, diese aber nicht in der DB gespeichert werden sollen?
Je nachdem musst du vorher die Daten lesen und vergleichen und dann updaten, oder direkt einfach updaten. (möglicherweise kann man das SQL Statement auch entsprechend anpassen um dort etwas Logik reinzubekommen)

Leider hast du uns nicht genau gesagt was die Anforderung ist, bzw wo genau das Problem liegt.
 
Hi, also es handelt sich da um 15.000 Produkte. Die Hersteller senden uns eine Liste mit neuen Produkte, geänderten Beschreibungen etc.

Wenn ich jetzt einfach ALLE 15.000 Produkte täglich update (und somit sinnlos Daten überschreibe die keine Änderung haben) Dauert das sehr sehr lange.

Also werde ich wohl oder übel alle Daten erstmal prüfen und sobald eine Änderung vorhanden ist, updaten.
Dachte es gibt evtl. ein Statement was das alleine macht, aber UPDATE überschreibt ja einfach die Daten richtig
 
Und vom Hersteller bekommt ihr eine komplette Liste aller 15.000 Produkte, wobei bei manchen geänderte Daten vorhanden sind?

Wenn ihr immer eine komplette Liste bekommt würde ich hier schon mal ansetzen und abklären ob es möglich ist:
a.) nur die Liste von geänderten Produkte zu bekommen
b.) die geänderten Produkte in der Liste irgendwie "makieren" (z.B.: "NEU" vor jedem Datensatz hinschreiben)
Dann musst du einfach nur noch die Liste durchgehen und die Daten updaten ohne darauf zu achten dass unnötige Zeilen vorhanden sind.

Ist das nicht möglich wird dir keine elegantere Möglichkeit bleiben also jede Zeile zu kontrollieren.
Die Kontrolle könnte man aber dahingehend optimieren: Füge eine Spalte hinzu für eine Prüfsumme, jedes Produkt bekommt anhand seiner Daten eine Prüfsumme.
Bei den neuen Daten bildest du die Prüfsumme dann ebenfalls und musst nur kontrollieren wo sich die Prüfsumme geändert hat (und musst nicht jede Spalte einzeln vergleichen)
 
Zuletzt bearbeitet:
Hoi zusammen,

hab grad mal bisschen gespielt und mit UPDATE IGNORE aus Spaß probiert.
Habe ein paar Tests gemacht, irgendwie scheint das nur zu ändern, wenn der Wert auch tatsächlich anders ist, kann mir das jemand bestätigen??
 
Laut MySQL Dokumentation - UPDATE ist das IGNORE dafür da um Fehler zu ignorieren.
Sprich die Zeile wird geupdated auch wenn du bei einer Spalte probierst Daten eines falschen Typs einzutragen.
Würdest du den PrimaryKey verletzten dann wird die Zeile auch nicht geupdated.
 

Neue Themen


Zurück
Oben