# MySQL 4.0.21 -> Mehrere Datensätze mit einem Insert Statement?



## Mik3e (28. Juli 2005)

Hi,

Kurze Frage:
Kennt jemand von Euch eine möglichkeit mit einem einzigen INSERT Statement mehrere Datensätze anzulegen?

Normal:
INSERT INTO
table_x
(a,b,c)
VALUES
*(1,2,3)*

Was ich benötige  (PSEUDOCODE, das "+" ist hier symbolisch zu verstehen):
INSERT INTO
table_x
(a,b,c)
VALUES
*(1,2,3) + 
(4,5,6) +
(7,8,9) +*

Das ganze hat den hintergrund, dass über ne For-Schleife mehrere Datensätze angelegt werdenn. Derzeit wird bei jedem Durchlauf ein INSERT ausgeführt. Für die Performance ist es klarerweise besser, wenn der QUERY in der Schleife erzeugt und dann nur ein INSERT Statement ausgeführt wird.

Leider kenne ich keine Möglichkeit um das mit einem Statement abzufrühstücken. (Oder ich steh komplett auf der Leitung). Vielleicht habt Ihr ne Idee

Danke & LG
Mike


----------



## vop (28. Juli 2005)

Mehre Einträge in einem Insert geht nur, wenn Du statt Values mit SELECT arbeitest (aber das kommt bei Dir ja nicht in Frage).

Vorschlag:
Erzeuge doch zunächst ein Script (mehrere Insert-Befehle hintereinander jeweils mit ; abgeschlossen)

Nach dem Schleifendurchlauf führst du das script einmal aus.
vop


----------



## Mik3e (28. Juli 2005)

Hi,

Ja, das ist eine Lösung, die mir aber Performancetechnisch nichts bringt (es geht um eine Performancesteigerung auf der MySQL Maschine, nicht dem Webserver)...
Wenn ich nun so wie vorgeschlagen die INSERTS zusammenfasse, wird vom MySQL Server ja dennoch jedes Statement einzeln ausgeführt.

Danke dennoch, habe sowas schon vermutet ))


----------



## vop (28. Juli 2005)

Du könnstest allerdings die Einträge in eine Datei schreiben und diese dann mit LOAD DATA
schnell einlesen
vop


----------



## Mik3e (28. Juli 2005)

Geht leider auch nicht...
Und würde das System wahrscheinlich noch mehr ausbremsen (File-Zugriffe sind ja bekanntlich nie sonderlich flott unterwegs )


----------



## ManicMarble (28. Juli 2005)

_Natürlich_ kann man mit einem INSERT mehrere Datensätze anlegen. Und Mik3e war schon verdammt nah dran nur ein , statt dem +:

```
INSERT INTO table_x
  (a,b,c)
VALUES
  (1,2,3),
  (4,5,6),
  (7,8,9)
```
Das hat natürlich irgendwo seine Grenzen...

_Martin_


----------



## Mik3e (28. Juli 2005)

Tatsächlich Habe ich nirgendwo in der Doku gefunden..
Werde es jedenfalls gleich versuchen )

Danke & LG
Mike


----------



## snobDOC (26. August 2009)

Wie geht das ganze wenn ich von templates arrays mehrere Daten in die Datenbank bringen will mit 1x = 10 oder so? 

MfG SnopDOC


----------



## h34onfh34h9 (30. Juni 2010)

Hallo,

ich brauche eine Funktion, oder ähnliches, 
welche mir Zufallsdaten in eine MSSQL-Datenbank schreibt.

Beispiel:
Die Funktion heißt 'tabelle_fuettern' und hat einen Parameter (die Anzahl der Datensätze)
Die Tabelle heißt 'tabelle' (Spalte1, Spalte2, Spalte3, Spalte4)

SELECT tabelle_fuettern (1000000)

nun soll die Funktion eine Millionen mal:
INSERT INTO tabelle  (Spalte1, Spalte2, Spalte3, Spalte4) SELECT 'Wert1', 'Wert2', 'Wert3', 'Wert4';
ausführen.


Geht soetwas?
Kann mir jemand helfen?

MfG 
treFFnix


----------



## Yaslaw (30. Juni 2010)

Im Titel steht MySQL, im Text MSSQL
Was jetzt?

Nachtrag:
Ups, ist ja ein alter Thread und mMn ungeeignet für deine Frage


----------



## tombe (30. Juni 2010)

Auch wenn ein neuer Beitrag sicher besser gewesen wäre, so könntest du es lösen:


```
<?php
function tabelle_fuettern($anzahl, $durchlauf) {

  echo "Durchlauf " .$durchlauf ." von " .$anzahl ."<br />";
  $durchlauf++;
  if ($durchlauf <= $anzahl) tabelle_fuettern($anzahl, $durchlauf);

}

echo "<b>Start</b><br />";
tabelle_fuettern(10, 1);

?>
```

Nur das du in diese Funktion dann halt anstatt der ECHO- eben die INSERT-Anweisung einbauen müsstest.


----------



## Yaslaw (30. Juni 2010)

... sofern er mit PHP arbeitet ...


----------



## tombe (30. Juni 2010)

@yaslaw: Diesmal ein Punkt für dich und somit steht es nun doch zumindest wieder 1:1.


----------

