我正在开发一个新站点,我必须将它的旧数据迁移到具有新布局结构的新数据库。
我发现很难迁移,多个地址一个人可能有。
只是一个细节,当我从旧数据库插入这些客户端时,我让自动增量设置它的 ID,因此新客户端 ID 将与旧数据库不同表,我应该保持它们相同吗?
考虑以下表结构:
客户端表:
#|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
最佳答案
要拥有一个完全可移植的脚本而不依赖于自动生成的 ID,您需要确定 CLIENT 表中标识客户端的唯一列(ID 除外)。
假设名称是您的客户表的唯一属性,您可以像这样将数据插入地址表:
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
关于mysql - 在具有不同布局的两个数据库之间迁移数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26108464/