Datenbanken konsolidieren

soa

Erfahrenes Mitglied
Hallo zusammen,

ich stehe gerade vor dem Problem, mehrere gleiche Datenbanken ( MySQL ) zusammenzuführen. Hierbei besteht das Problem darin, dass eine ID vorhanden ist ( Autoincrement), die bei allen DB's in gleicher Weise bei 0 angefangen ist und dann incrementiert wurde. Die eigentliche Schwiedrigkeit liegt darin begründet, dass die ID,
die einen Kundensatz eindeutig identifiziert, als ForeignKey für die Warentabelle verwendet wird und Teil des Primärschlüssels dieser Tabelle ist.

Leider verfügt MySQL über keine Scriptsprache wie PL/SQL, so dass hier wohl mehrere SQL-Anweisungen erforderlich sein müssten.

Mein Ansatz bisher sieht so aus, dass wenn in der zu importierenden DB "A" 3000 Datensätze liegen, ich in DB "B" zu allen ID Werten einen Wert von 3000 addiere.

Ich bin nun auf der Suche nach dem richtigen Algorithmis zur Lösung des oben beschriebenen Problems. Über Hinweise Eurerseits wäre ich sehr dankbar.

Vielen Dank
Jörn
 
Hallo,

dein ansatz sieht soweit gut aus.

Annahme:
Tabelle A ist die zieltabelle
Tabelle B ist die quelltabelle
der autoincrement primary key der tabelle heisst id
MAX(id) in tabelle A = 3000
das tabellenschema von A und B ist kompatibel

Im wesendlichen gibt es 2 möglichkeiten
Möglichkeit 1
----
1.) zuerst musst du den primary key dropen, ansonsten kommt es beim update möglicherweise zu primary key violations und dein update bricht mitten drin ab.
2.) du updatest die ID
3.) du kopierst die daten in die andere tabelle
SQL:
ALTER TABLE B DROP PRIMARY KEY;
UPDATE B SET id = id + 3000;
INSERT INTO A SELECT * FROM B;

Gebenfalls musst du das insert-select statement anpassen um abweichungen im tabellenschema auszugleichen
z.B.
SQL:
INSERT INTO A (id, spalte3, spalte2, spalte1) SELECT id, test1,test2,test3 FROM B
----
Möglichkeit 2:

du modifizierst die originaldaten nicht, sondern machst das ganze direkt in einem schritt:
SQL:
INSERT INTO A (id, spalte1, spalte2, spalte3) SELECT (id+3000) AS id, spalte1, spalte2, spalte3 FROM B

----

Für gegebenfalls vorhandene foreign key referenzierte tabellen gilt das oben beschriebene analog, du musst nur sicherstellen, dass du es nirgends vergisst.

Solltest du eine der originaltabellen behalten wollen fürst du methode 1 schritt 1 und 2 aus. Dannach musst du lediglich den primary key dannach wieder anlegen.
 
Zuletzt bearbeitet:
Zurück