将数据从父表(A)及其子表(B)移动到父表(C)及其子表(D) - Mysql

时间:2014-12-04 14:57:50

标签: mysql sql stored-procedures cursor

我在编写查询或程序时遇到问题。我的要求是我想将表A及其子表B中的数据移动到具有相同结构的新父表(C)及其子表(D)。

表A中的主键列插入表B中的一列中以供参考。我的挑战是当我从父表A移动到新的父表C时,将生成新的主键。当我将数据从子表B移动到新的子表D时,我想将新生成的键插入表D中并使用相应的行。

它可能只是对某人的程序或查询。但我无法弄清楚。需要一些帮助!

1 个答案:

答案 0 :(得分:0)

假设您有一张表A:

创建表a(   id int(10)unsigned NOT NULL AUTO_INCREMENT,   some_data varchar(100),   PRIMARY KEY(id) )AUTO_INCREMENT = XXX;

表C:

创建表c(   id int(10)unsigned NOT NULL AUTO_INCREMENT,   some_data varchar(100),   PRIMARY KEY(id) )AUTO_INCREMENT = YYY;

在表c上写下你的auto_increment值并从你的c.id中删除它:

ALTER TABLE c CHANGE id id int(10)unsigned NOT NULL;

创建一个临时表,例如。 tmp_copy_a_c具有相同的auto_increment vaule: CREATE TEMPORARY TABLE tmp_copy_a_c(   id_c int(10)unsigned NOT NULL AUTO_INCREMENT,   id_a int(10)unsigned NOT NULL,   some_data varchar(100),   PRIMARY KEY(id_c),   INDEX(id_a) )AUTO_INCREMENT = YYY;

然后将所有数据从A复制到临时表:

INSERT INTO tmp_copy_a_c(id_a,some_data)SELECT id,some_data FROM WHERE“表a上的某些条件”;

从tmp_copy_a_c复制到表c: INSERT INTO c(id,some_data)SELECT id_c,some_data FROM tmp_copy_a_c;

将数据从表B复制到表D(假设id_d是另一个自动增量): INSERT INTO d(id_c,some_child_data) SELECT tmp.id_c,b.some_child_data FROM tmp_copy_a_c tmp 加入b   ON tmp.id_a = b.id_a;

在表C上重新创建auto_increment,如下所示:

ALTER TABLE c CHANGE id id int(10)unsigned NOT NULL AUTO_INCREMENT;

注意:此解决方案假设在运行此脚本时,其他进程不会增加/更改表。