使用不同布局在两个数据库之间迁移数据

时间:2014-09-29 20:39:50

标签: mysql sql

我正在开发一个新站点,我必须将它的旧数据迁移到新数据库,该数据库具有新的布局结构。

我发现难以迁移,多个地址一个人可能有。

只是一个细节,当我从旧数据库插入这些客户端时,我让自动增量设置它的ID,所以新客户端ID将与旧数据库不同表,我应该保持不变吗?

考虑下表结构:

CLIENT TABLE

#|id_client|#|name|#
#|    1    |#|John|#
#|    2    |#|Bob |#
#|    3    |#|Karl|#

这个表很容易迁移,我只需要这样做:

INSERT INTO NEW_DB.CLIENT SELECT * FROM (SELECT id_cliente,name FROM OLD_DB.CLIENT)

但是,如果我有一个地址表,用户可能有0..n地址怎么办?
如何将其插入到Client.id_client的FK引用中,记住新客户端ID与旧的?

#|id_address|#|address|#|Client_id_client
#|    1     |#|Addr123|#|       1
#|    2     |#|Addr321|#|       1
#|    3     |#|Addr124|#|       2

1 个答案:

答案 0 :(得分:1)

要拥有一个完全可移植的脚本而不依赖于自动生成的ID,您需要确定CLIENT表中标识客户端的唯一列(ID除外)。

假设name是您客户端表上的唯一属性,您可以将数据插入地址表中,如下所示:

INSERT INTO NEW_DB.ADDRESS (COL1, COL2,..., CLIENT_ID)
SELECT OLD_DB.ADDRESS.COL1,  OLD_DB.ADDRESS.COL2,... 
(SELECT NEW_DB.CLIENT.CLIENT_ID from NEW_DB.CLIENT WHERE NEW_DB.CLIENT.NAME = OLD_DB.CLIENT.NAME) 
FROM OLD_DB.ADDRESS, OLD_DB.CLIENT 
WHERE OLD_DB.ADDRESS.CLIENT_ID =  OLD_DB.CLIENT.CLIENT_ID