MySQL Datensätze übertragen...

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
ManfredG
Beiträge: 112
Registriert: 12.08.2004 17:38:14

MySQL Datensätze übertragen...

Beitrag von ManfredG » 12.06.2009 16:26:01

Hallo zusammen,
ich muß recht viele Datensätze von einer MySQL Datenbank in eine andere Datenbank übertragen.
Beide Datenbanken laufen auf dem selben Server.

Ich habe zwei Probleme zu lösen:
A.) In der Quell Datenbank heißen die Spalten anders als in der Ziel Datenbank.
B.) Es sollen nur die Datensätze übertragen werden, die in der Ziel Datenbank noch nicht vorhanden sind.

Das ganze sieht sinngemäß so aus:

Quell Datenbank
Spalten v_name n_name tel_nr

Ziel Datenbank
Spalten vname nname telnt

Wie läßt sich so etwas am einfachsten machen?

Liebe Grüße
Manfred
Zuletzt geändert von ManfredG am 12.06.2009 16:40:18, insgesamt 1-mal geändert.

Benutzeravatar
MarkusF
Beiträge: 361
Registriert: 04.06.2007 12:45:22

Re: MySQL Datensätze übertragen...

Beitrag von MarkusF » 12.06.2009 16:40:17

ManfredG hat geschrieben:Quell Datenbank
Spalten v_name n_name tel_nr
Ziel Datenbank
Spalten vname nname telnt

Wie läßt sich so etwas am einfachsten machen?
das Problem der unterschiedlichen Spalten lässt sich mit SQL-Mitteln lösen, s. LOAD DATA INFILE. Dazu musst du die Daten aber vorher aus der Quelltabelle exportieren. Mit den Optionen REPLACE/IGNORE kannst du die Neuanlage/Überschreibung bestehender Sätze steuern. Da stößt du aber evtl. an die Grenzen des Befehles, wenn die Prüfung, ob ein Satz nun doppelt ist oder nicht, etwas komplexer werden sollte. Am flexibelsten bist du mit einer Logik in der Programiersprache deiner Wahl (PHP/Python/Perl/...), die direkt Satz für Satz ausliest, prüft, zuordnet und schreibt.

Grüße, Markus

ManfredG
Beiträge: 112
Registriert: 12.08.2004 17:38:14

Re: MySQL Datensätze übertragen...

Beitrag von ManfredG » 13.06.2009 01:47:24

Hallo,
alles klar, ich bin jetzt schon ein Stück weiter.

Ich werde die Datensätze über ein Shell Script der reihe nach auslesen und dann in die Ziel DB eintragen.

Jetzt habe ich aber immer noch ein Problem zu lösen:
Wenn es z.B. schon einen Datensatz mit dem Wert "Hans Müller" in der Spalte name gibt, darf der Datensatz nicht doppelt eingetragen werden, sondern nur aktualisiert werden.

Kann ich das direkt mit einem MySQL Befehl machen oder muß ich erst mit meinem shell Script nachsehen, ob es schon einen Datesatz mit dem Wert "Hans Müller" in der Spalte name gibt und dann ein INSERT b.z.w. ein UPDATE machen?

Liebe Grüße
Manfred

mopodo
Beiträge: 44
Registriert: 15.05.2008 21:33:02

Re: MySQL Datensätze übertragen...

Beitrag von mopodo » 13.06.2009 02:22:04

Eventuell kannst du das mit einem Trigger und einer Funktion machen, aber ich denke eher weniger...

Die Frage hab ich mir auch schon oft gestellt aber nie beantwortet.

lg

Benutzeravatar
MarkusF
Beiträge: 361
Registriert: 04.06.2007 12:45:22

Re: MySQL Datensätze übertragen...

Beitrag von MarkusF » 13.06.2009 08:54:25

ManfredG hat geschrieben:Kann ich das direkt mit einem MySQL Befehl machen oder muß ich erst mit meinem shell Script nachsehen, ob es schon einen Datesatz mit dem Wert "Hans Müller" in der Spalte name gibt und dann ein INSERT b.z.w. ein UPDATE machen?
Grundsätzlich geht das mit SQL, aber da sollte die Logik 'wann ist ein Satz doppelt' nicht allzu komplex werden, bzw. über einen entsprechenden Key exakt vorliegen. In der Praxis wäre das dann z.B. ne Kundennummer, die du aber wohl in den einzulesenden Daten so noch nicht hast. Deshalb, um deine Frage zu beantworten, und unterstellend, dass die o.g. Voraussetzungen zutreffend sind: Ja, du musst nachsehen.

Bei vielen Datensätzen ist 'Hänschen Müller', also Vorname/Name leider auch zu wenig, die gibt's auch mal doppelt, also brauchst du noch Geburtsdatum oder Straße als Absicherung, und das geht halt m.E. am besten über ne externe Sprache.

Grüße, Markus

Benutzeravatar
shoening
Beiträge: 915
Registriert: 28.01.2005 21:05:59
Lizenz eigener Beiträge: MIT Lizenz

Re: MySQL Datensätze übertragen...

Beitrag von shoening » 13.06.2009 18:23:07

Hi,

ich wuerde mir die Daten der Tabelle aus dem Quellsystem erstmal 1:1 in eine
neue (Staging-)Tabelle auf der Zieldatenbank uebertragen.

Dann kannst Du innerhalb der Zieldatenbank im 2. Schritt (vielleicht auch mit
einem einzigen SQL) alle Datensaetze die Du ein die andere Tabelle haben moechtest
uebertragen. Das geht dann bestimmt auch mit einem SQL Befehl und bei Problemen
gibts dann noch den Rollback.

Ciao
Stefan
Bürokratie kann man nur durch ihre Anwendung bekämpfen.

Antworten