mysql: tabledump mittels sql Anfrage einlesen
-
Hallo,
hier erstell ich den Dump
http://www.c-plusplus.net/forum/viewtopic-var-t-is-107862.htmlnur wie les ich die erzeugte Datei wieder per SQL-Anfrage ein?
ein schönes
load data infile
erwartet laut doku die Daten in Tabellenform.
Muss ich jetzt die einzelnen Anfragen in der Datei selber rausparsen
dass ich sie dem Server schicken kann?
Wär aber arg umständlich...thx
Martin
-
laut dev.mysql.com und meiner Erfahrung kannst du aus jeder X-Beliebigen Datei lesen. Du musst nur angeben wie die Daten in der Datei aufgebaut sind:
LOAD DATA INFILE 'data.txt' INTO TABLE table2
-> FIELDS TERMINATED BY ',';Selbsterklärend?
Sonst zieh dir mal die Hilfe rein http://dev.mysql.com/doc/mysql/en/load-data.html
-
jo,
und genau hier liegt der Hund begraben:
Hab in der Datei die Daten nicht in einer wie auch immer gearteten
Tabellestruktur (Kommagetrennt etc.),
sondern es stehen SQL Anweisungen drin.
(ein Tabledump).Und das Zeug möcht ich gern einlesen.
Problem:
Es kann immer nur eine einzige SQL-Anweisung angegeben werden.
Erst wenn diese abgearbeitet ist, kann die nächste zum Server geschickt werden.=> Müsste erst alle Statements rausfiltern und dann einzeln an den Server schicken.
=> viel Arbeit, müsste doch irgendwas fertiges bei mySql dabei sein.
Schließlich kann man im Konsolenclient auch mehrere durch ";" getrennte Anfragen
eingeben (also sowas in der Art: "show tables; select * from mytable; select
current_date();"
-
Wo liegt denn das Problem? Auslesen der Querys oder senden eben dieser?
Das abschicken der Querys ist eine for-Schleife mit fehlerbehandlung und fertig. Lustiger wird das Lesen der Querys. Werden die Querys z.B. durch zeilenumbrüche getrennt in die Datei geschrieben, kann es ja auch vorkommen, das ein eben solcher auch in der Query an sich (als String) vorkommt. Das ist schon etwas vertrackter... Da könnte man sich aber z.B. einen Zeilenumbruch in der Query vor dem schreiben in die Datei in ein "\n" als 2 Chars umwandeln und dann schreiben. Das ganze wäre dann ne 5-min Arbeit zum Coden
-
einzelne Anfragen werden durch Strichpunkt getrennt,
aber nur, wenn dieser nicht innerhalb einer Zeichenkette steht.Und genau diesen Parsevorgang wollte ich mir ersparen.
Aber scheinbar komm ich nicht drum rum.
thx
Martin
-
Dann nimm was fertiges.
Warum immer das Rad neu erfinden.
Wiist du es für PHP schaue dir phpmyadmin an.
Willst du es für C/C++ schaue dir den Client (mysql) von MySQL an.