2012-05-09 21 views
5

¿Existe una manera fácil de copiar registros principales y todos los registros secundarios relacionados usando estrictamente SQL sin usar cursores o scripts/código externos? He aquí un ejemplo de lo que tengo:Copiando el padre de MySQL y todos los registros secundarios relacionados en la base de datos a un nuevo 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> 

Básicamente, lo que necesita para hacer un duplicado exacto de todos estos datos. Los únicos campos que cambiarán son los ID, ya que todos son auto_increment. En función del esquema anterior, cuando copie los registros en la tabla de categorías, terminaré con todos los nuevos valores de category_id. Cuando creo duplicados de los registros parent_table necesitaré una manera de actualizar de alguna manera los valores de category_id antiguos con los nuevos valores de category_id que acabo de crear. Luego, necesitaré usar los nuevos valores parent_record_id al copiar los registros child_record1 y child_record2.

Siento que debe haber una manera más fácil de lograr esto en lugar de escribir todo de forma externa en PHP u otro idioma. ¿Esta ahí?

Respuesta

1

revisar este artículo, http://dev.mysql.com/doc/refman/5.1/en/insert-select.html

Usted puede hacer básicamente las siguientes

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

Gracias Bryan. Soy consciente de esa sintaxis. Eso no resuelve el problema que tengo con la copia de otros registros relacionados y el seguimiento/actualización de todos los nuevos ID. – ShawnCBerg

Cuestiones relacionadas