MySQL Multi-Update
Hans
- datenbank
Hallo,
ich führe folgenden MULTI-INSERT in eine Mysql-Datenbank aus:
INSERT INTO test
(id,didIdo,MidIdo)
VALUES
(1,23.23,444.223)
(2,55.23,22.223)
..
(900,22.23,11.2)
wobei id ein KEY aber kein Primärkey ist
Gibt es auch eine adequate Möglichkeit in dieser Form einen UPDATE - Befehl einzusetzen, quasi also einen MULTI-UPDATE?
viele grüße
Hans
echo $begrüßung;
Gibt es auch eine adequate Möglichkeit in dieser Form einen UPDATE - Befehl einzusetzen, quasi also einen MULTI-UPDATE?
Jein. Ein UPDATE wirkt auf alle Zeilen und wenn eine WHERE-Bedingung angegeben ist, auf die Zeilen, auf die diese Bedingung zutrifft.
Es gibt allerdings für UPDATE die Multi-Table-Syntax, mit der man die einzelnen Datensätze einer Tabelle über JOIN-Bedingungen mit denen einer anderen Tabelle verbinden kann und dann Werte übertragen kann. Diese Join-Tabelle kann auch eine temporäre Tabelle sein.
echo "$verabschiedung $name";
Hallo,
UPDATE die »» Multi-Table-Syntax, mit der man die einzelnen Datensätze einer Tabelle über »» JOIN-Bedingungen mit denen einer anderen Tabelle verbinden kann und dann »» Werte übertragen kann. Diese Join-Tabelle kann auch eine temporäre Tabelle sein.
danke, das klingt gut. Würdest du dieses Vorgehen im Falle sinnvoll halten, im Falle von ca. 1000 Zeilen, die zu updaten wären. Also konkret, ist es sinnvoller, mit oben genannter Technik zu arbeiten, als 1000 mal einen Single-Update durchzuführen?
Viele Grüße
Hans
echo $begrüßung;
Würdest du dieses Vorgehen im Falle sinnvoll halten, im Falle von ca. 1000 Zeilen, die zu updaten wären. Also konkret, ist es sinnvoller, mit oben genannter Technik zu arbeiten, als 1000 mal einen Single-Update durchzuführen?
Die Anzahl wird weniger ein Kriterium sein, noch dazu bei dem nicht so hohen Wert. Die Frage ist eher, wo kommen die Werte her und in welcher Form liegen sie vor. Es gibt auch beim INSERT noch einige Möglichkeiten, beispielsweise ON DUPLICATE KEY UPDATE und das REPLACE-Statement.
echo "$verabschiedung $name";
Hallo
Die Anzahl wird weniger ein Kriterium sein, noch dazu bei dem nicht so »»hohen Wert. Die Frage ist eher, wo kommen die Werte her und in welcher Form »»liegen sie vor.
die Daten werden aus XML-Dateien geparst. Diese Daten sollen dann in eine Datenbank geschoben werden. Ist der entsprechende Eintrag in dieser DB schon enthalten (bzw. ID), soll ein UPDATE durchgeführt werden.
Ich muss nun also bei jeder ID prüfen, ob sie schon in der DB drin ist. Wenn Ja, dann UPDATE, wenn Nein, dann INSERT.
»»Es gibt auch beim »»INSERT noch »»einige Möglichkeiten, beispielsweise ON DUPLICATE KEY UPDATE und das »»REPLACE-Statement.
Habe ich mir schon genauer angeguckt, und wäre genau das, was ich benötige. Problem aber hier, dass ich keinen eindeutigen Key in der Datenbank habe. An der Struktur der DB darf ich nichts ändern.
dedlfix, ich habe nochmal eine dumme Frage:
Meine Tabelle planet:
id|name1|name2
1 "erde", "mond"
2 "sonne", "mars"
3 "merkur", "jupiter"
..
100 "sonne", "mars"
Nun eröffne ich mit create temp table eine neue Tabelle planet_temp
id|name1|name2
1 "erde", "sonne"
3 "sonne", "merkur"
und mache dann mit der Multi-Table-Funktion einen UPDATE
UPDATE planet,planet_temp SET
planet.name1=planet_temp.name1,
planet.name2=planet_temp.name2
WHERE planet.id=planet_temp.id;
Wozu brauche ich dann genau ein JOIN-Statement? Nur wenn ich beide Tabelle abgleichen will?
Gruss
Hans
echo $begrüßung;
UPDATE planet,planet_temp SET
planet.name1=planet_temp.name1,
planet.name2=planet_temp.name2
WHERE planet.id=planet_temp.id;
>
> Wozu brauche ich dann genau ein JOIN-Statement? Nur wenn ich beide Tabelle abgleichen will?
Diese WHERE-Bedingung ist bereits ein implizites JOIN. Ein JOIN legt fest, in welcher Beziehung die Datensätze der einen Tabelle zu denen der anderen Tabelle stehen. In deinem Fall wird die Beziehung über eine gleiche id hergestellt.
echo "$verabschiedung $name";
Moin!
Wozu brauche ich dann genau ein JOIN-Statement? Nur wenn ich beide Tabelle abgleichen will?
Ich frage mich ja gerade, was du überhaupt erreichen willst mit dem ganzen Zeugs.
Wenn's dir um den Hauch von Performance beim UPDATE geht: Nimm Prepared Statements. Das gilt übrigens dann analog auch für das INSERT.
- Sven Rautenberg
Ich frage mich ja gerade, was du überhaupt erreichen willst mit dem ganzen Zeugs.
Wenn's dir um den Hauch von Performance beim UPDATE geht: Nimm Prepared Statements. Das gilt übrigens dann analog auch für das INSERT.
Danke Sven, das hört sich spitze an. Spart man sich den ganzen Mumpitz mit den Multi-Insert und Updates.
Gruss
Hans