PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Befehl: Load Data Infile



Linuxbine
28-03-2006, 10:20
Hallo,

ich soll eine Datenbank erstellen, und soll, um die Daten in die Datenbank zu bekommen, den Befehl "Load Data Infile" benutzen.
Ich arbeite mit MySQL von ApacheFriens.

Ich habe schon etliche Zeit genutzt, um danach zu googeln, hab natürlich auch was gefunden, aber ich werde daraus irgendwie nicht schlau.
Ich weiß immernoch nciht, wie ich das so richtig machen soll.

Ich hab mir jetzt einfach mal eine Text-Datei erstellt mit den Daten:
2 Sachbearbeiter
Diese Daten sollen in die Tabelle Taetigkeit einer Datenbank.
Die Spalten lauten: TNr (2) und TName (Sachbearbeiter).

Dann habe ich einfach den Befehl:
load data file media/USB_DISK/Datenbank-Dateien into table Taetigkeit; ausgeführt. Daraufhin erscheint die Fehlermeldung:
mysql> load data file media/USB_DISK/Datenbank-Dateien into table Taetigkeit; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'file media/USB_DISK/Datenbank-Dateien into table Taetigkeit' at line 1
In dieser Tabelle steht allerdings schon ein Wert, den ich mit dem einfachen Insert-Befehl eingefügt habe. Und darunter will ich jetzt die anderen Daten bringen.

Mache ich da jetzt grundsätzlich was falsch?
Oder ist nur im Aufruf etwas falsch?

Ich danke schon mal im voraus für eure Antworten.
(Soweit geholfen werden kann.)

MfG

michael.sprick
28-03-2006, 10:31
schau mal hier

load data (http://dev.mysql.com/doc/refman/4.0/de/load-data.html)

...dass sollte helfen

Linuxbine
28-03-2006, 11:41
Danke, hab es hinbekommen. Hatte nur die Anführungszeichen beim Quellpfad der Datei vergessen.

Linuxbine
28-03-2006, 11:51
Ih habe aber noch eine Frage.

Wie ist dass, wenn ich jetzt 2 Tabellen befüllen möchten, mit diesem Befehl.
Ist das überhaupt möglich? Dazu konnte ich in dem Text nichts finden.
Normal den Befehl könnte ich ja dann so ähnlich schreiben:
Load Data Local infile "/media/USB_DISK/Datenbank-Dateien" into table Taetigkeit and into table ...;

Wäre das möglich?

Aber wie schreibe ich das in der Text-Datei?
Und wie weiß die Datenbank, was ich in welche Tabelle geschrieben habe möchte?

elrond
28-03-2006, 14:27
eine alternative dazu ist in die datei insert-statements zu schreiben und dann der db vorzuwerfen...

Linuxbine
29-03-2006, 13:33
eine alternative dazu ist in die datei insert-statements zu schreiben und dann der db vorzuwerfen...

Mmh.. klingt logisch... hab ich auch schon überlegt. Aber wie legt man es der Datenbank vor?
Soweit ich herausgefunden habe, kann man doch mit Load Data Infile nur die Daten in eine Tabelle schreiben?
Oder kann man dann anstatt "into table ..." irgendwie "to database ... " angeben?
Wobei es bei mir nicht so wirklich klappt.
Hast du da eventuell auch einen Tipp für mich?

elrond
29-03-2006, 13:40
mache ich gern...

ich erzeuge eine datei, die zB. so aussieht


insert into objobjass values(nextval('seq_assid'),771343,770622);
insert into objobjass values(nextval('seq_assid'),771348,770622);
insert into objobjass values(nextval('seq_assid'),781780,770622);
insert into objobjass values(nextval('seq_assid'),781786,770622);
insert into objobjass values(nextval('seq_assid'),781782,770622);
insert into objobjass values(nextval('seq_assid'),781784,770622);
insert into objobjass values(nextval('seq_assid'),780862,770622);
insert into objobjass values(nextval('seq_assid'),780864,770622);
insert into objobjass values(nextval('seq_assid'),780873,770622);


(ist jetzt nicht mysql sonder postgres, macht aber keinen unterschied.)

dann auf der shell einfach: "cat <dateiname>|mysql <dbname>" angeben
bsp:


cat tt.sql | mysql test


damit werden die anweisungen aus der datei in der db ausgeführt. ggf. musst du noch einen db-benutzer+pw angeben.