# Datenbank Update



## HakBak (30. Dez 2009)

Hallo, 
ich mache ein Update-Statement auf meine DB. Statement.Update() gibt ja die Anzahl der Updates zurück. Eine Frage habe ich dazu, wenn ich weitere Updates mache und der Inhalt des Updates ist mit der zu aktualisierenden Zeile in der Tabelle identischer, wird dann eine 1 oder eine 0 zurückgegeben. Im Grund genommen müsste da ja dann kein Update ausgeführt werden. Ich sprech hier von einem Zeile für Zeile Update, also für jede Zeile wird ein eigenes Statement generiert.

Hintergrund ist, dass ich Updates duchführe und wenn neue Zeilen in einem Update sind, sollen diese per INSERT eingefügt werden ansonsten sollen eben nur die Daten in der Zeile aktualisiert werden. Wie finde ich nun heraus, ob der neue Eintrag ein UPDATE oder ein INSERT sein muss? Das sollte auch möglichst schnell von statten gehen, da ein Updatezyklus ca. 400000 Zeilen beinhaltet, die jeweils einzeln eingefügt werden.


----------



## ign0rant (30. Dez 2009)

Falls du MySQL verwendest, könntest du REPLACE statt INSERT/UPDATE nehmen.


----------



## DerEisteeTrinker (5. Jan 2010)

Was ist denn häufiger, dass UPDATE oder das INSERT? Je nachdem würde ich einfach den wahrscheinlichsten Fall probieren und bei ner Exception die Alternative hinterherschicken.


----------



## vladimir75 (5. Jan 2010)

HakBak hat gesagt.:


> Hallo,
> ich mache ein Update-Statement auf meine DB. Statement.Update() gibt ja die Anzahl der Updates zurück. Eine Frage habe ich dazu, wenn ich weitere Updates mache und der Inhalt des Updates ist mit der zu aktualisierenden Zeile in der Tabelle identischer, wird dann eine 1 oder eine 0 zurückgegeben. Im Grund genommen müsste da ja dann kein Update ausgeführt werden. Ich sprech hier von einem Zeile für Zeile Update, also für jede Zeile wird ein eigenes Statement generiert.
> 
> Hintergrund ist, dass ich Updates duchführe und wenn neue Zeilen in einem Update sind, sollen diese per INSERT eingefügt werden ansonsten sollen eben nur die Daten in der Zeile aktualisiert werden. Wie finde ich nun heraus, ob der neue Eintrag ein UPDATE oder ein INSERT sein muss? Das sollte auch möglichst schnell von statten gehen, da ein Updatezyklus ca. 400000 Zeilen beinhaltet, die jeweils einzeln eingefügt werden.



Es kommt drauf an wie deine DB aufgebaut ist. Beinhalteten deine Tabellen die Primär Schlüsseln. Wenn ja, und es um MySQL handelt, kannst du wie vorgeschlagen wurde, REPLACE zu nehmen. 
REPLACE vergleicht die Datensätze mit gleicher ID. Findet-> prüft dann ob was geändert wurde -> ist was geändert -> löscht vorhandene Daten und schreib aktualisierte rein. 
Findet keine eindeutige ID, funktioniert weiter wie INSERT. 

Vladimir


----------

