Anzeige:
Ergebnis 1 bis 7 von 7

Thema: Befehl: Load Data Infile

  1. #1
    Registrierter Benutzer
    Registriert seit
    28.03.2006
    Beiträge
    13

    Befehl: Load Data Infile

    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

  2. #2
    Registrierter Benutzer
    Registriert seit
    19.08.2004
    Beiträge
    404
    schau mal hier

    load data

    ...dass sollte helfen

  3. #3
    Registrierter Benutzer
    Registriert seit
    28.03.2006
    Beiträge
    13
    Danke, hab es hinbekommen. Hatte nur die Anführungszeichen beim Quellpfad der Datei vergessen.

  4. #4
    Registrierter Benutzer
    Registriert seit
    28.03.2006
    Beiträge
    13
    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?

  5. #5
    Registrierter Benutzer Avatar von elrond
    Registriert seit
    03.10.2001
    Ort
    potsdam
    Beiträge
    881
    eine alternative dazu ist in die datei insert-statements zu schreiben und dann der db vorzuwerfen...
    "Um die Welt zu ruinieren, genügt es, wenn jeder seine Pflicht tut." (Winston Churchill)

  6. #6
    Registrierter Benutzer
    Registriert seit
    28.03.2006
    Beiträge
    13
    Zitat Zitat von elrond
    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?

  7. #7
    Registrierter Benutzer Avatar von elrond
    Registriert seit
    03.10.2001
    Ort
    potsdam
    Beiträge
    881
    mache ich gern...

    ich erzeuge eine datei, die zB. so aussieht
    Code:
     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:
    Code:
    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.
    "Um die Welt zu ruinieren, genügt es, wenn jeder seine Pflicht tut." (Winston Churchill)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •