PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mysql und Replace Into



LinuxPaule
02.06.09, 12:24
Hallo Zusammen,

mich beschäftigt gerade die Funktion Replace Into. Ich habe damit meinen Import von ca. 10.000 Datensätzen pro Tag "gelöst". Soweit funktioniert alles, der Import läuft nun seit 5 Tagen ohne Probleme. Nun habe ich aber bemerkt das die UID mittlerweile schon bei 70.000 angekommen ist. Und das nur innerhalb dieser 5 Tage. Nun bin ich mir nicht sicher ob es doch die beste Methode war so den Import zu gestalten. Warum ich mich für diese Methode entschieden habe, ist eigentlich für mich relativ klar gewesen. Ich bekomme die Datensätze in einem XML Format und Importiere die Daten so wie ich sie bekomme, sie werden auch so weiterverarbeitet. Ohne das ich an den Daten selber etwas ändere. Und es sind jeden Tag die gleichen Datensätze die sich evtl. nur geringfügig ändern, oder neue Hinzukommen, manchmal fallen auch ein paar weg, die aber dann bei uns gespeichert bleiben sollen. Damit fand ich, das der Import mit "Replace Into" genau das richtige ist. Wenn Datensatz vorhanden ist, wird er überschrieben, wenn neuer hinzukommt, wird dieser "Inserted".

Nun aber die Frage, wenn jedesmal eine neue UID erzeugt wird für jeden Datensatz, der überschrieben wird, bin ich schnell an der Grenze vom "Int" angelangt, was passiert dann? Kann ich den Zähler des UID wieder zurücksetzten oder welche freigeben?

Gruß

Björn

marce
02.06.09, 12:29
Wenn Datensatz vorhanden ist, wird er überschrieben, wenn neuer hinzukommt, wird dieser "Inserted".
genau das macht replace eben _nicht_:

http://dev.mysql.com/doc/refman/5.0/en/replace.html

REPLACE works exactly like INSERT, except that if an old row in the table has the same value as a new row for a PRIMARY KEY or a UNIQUE index, the old row is deleted before the new row is inserted. See Section 12.2.5, “INSERT Syntax”.

Du suchst vermutlich eher
http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

LinuxPaule
02.06.09, 12:44
Ja, aber da kann ich doch nur einen Wert "Updaten" ich will ja aber den gesamten Datensatz dann updaten, oder soll das so funktionieren?

INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE a=1, b=2, c=3;

LinuxPaule
02.06.09, 13:36
ich habs jetzt wie oben angegeben ausprobiert, das klappt nicht, ich habe nachdem import von 10.000 Datensätzen nur den letzten Datensatz in der Datenbank. Das wars. Anscheinend "inserted" er den ersten Datensatz und danach überschreibt er fleißig den einen immer wieder.

Ich habe aber auch zwei Indexe auf meiner Datenbank. Der eine geht über zwei Felder. Wie gebe ich an, das er den benutzen soll?