将MySQL父级和数据库中的所有相关子记录复制到新ID

时间:2012-05-09 04:20:05

标签: mysql cursor copy

是否有一种简单的方法可以在不使用游标或外部脚本/代码的情况下使用严格的SQL复制父记录和所有相关的子记录?这是我所得到的一个例子:

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>

基本上,我需要完全复制所有这些数据。唯一会改变的字段是ID,因为它们都是auto_increment。基于上面的模式,当我复制类别表中的记录时,我将最终得到所有新的category_id值。当我创建parent_table记录的副本时,我需要一种方法以某种方式使用刚刚创建的新category_id值更新旧的category_id值。然后,在复制child_record1和child_record2记录时,我需要使用新的parent_record_id值。

我觉得必须有一种更简单的方法来实现这一点,而不是用PHP或其他语言将其全部编写到外部。有吗?

1 个答案:

答案 0 :(得分:1)

查看此文章http://dev.mysql.com/doc/refman/5.1/en/insert-select.html

您基本上可以执行以下操作

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