2012-05-09 4 views
5

Gibt es eine einfache Möglichkeit, übergeordnete Datensätze und alle verwandten untergeordneten Datensätze mit streng SQL ohne Cursor oder externe Skripte/Code zu kopieren? Hier ist ein Beispiel dafür, was ich habe:Kopieren von MySQL übergeordnete und alle verwandten untergeordneten Datensätze in der Datenbank auf eine neue ID

categories 
== 
category_id 
category_name 

parent_table 
== 
parent_record_id 
category_id 
... <other fields> 

child_table1 
== 
child_table1_id 
parent_record_id 
... <other fields> 

child_table2 
== 
child_table2_id 
parent_record_id 
... <other fields> 

Grundsätzlich, ich brauche eine exakte Kopie aller dieser Daten zu machen. Die einzigen Felder, die sich ändern, sind die IDs, da sie alle auto_increment sind. Basierend auf dem obigen Schema, wenn ich die Datensätze in die Kategorien-Tabelle kopiere, werde ich mit allen neuen category_id-Werten enden. Wenn ich Duplikate der parent_table-Datensätze erstelle, muss ich irgendwie die alten category_id-Werte mit den neuen category_id-Werten aktualisieren, die gerade erstellt wurden. Ich muss dann die neuen parent_record_id-Werte verwenden, wenn ich die Datensätze child_record1 und child_record2 kopiere.

Ich glaube, es muss einen einfacheren Weg geben, dies zu erreichen, als alles extern in PHP oder einer anderen Sprache zu schreiben. Ist da?

Antwort

1

Sie in diesem Artikel, http://dev.mysql.com/doc/refman/5.1/en/insert-select.html

Grundsätzlich können Sie die folgenden Schritte aus

INSERT INTO table (id, column1, column2) (SELECT NULL, column1, column2 FROM table WHERE whatever_id = 123); 
+0

Dank Bryan. Ich bin mir dieser Syntax bewusst. Das löst nicht das Problem, das ich beim Kopieren anderer verwandter Datensätze habe, und das Nachverfolgen/Aktualisieren aller neuen IDs. – ShawnCBerg

Verwandte Themen