mysql - 在具有不同布局的两个数据库之间迁移数据

标签 mysql sql

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

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

只是一个细节,当我从旧数据库插入这些客户端时,我让自动增量设置它的 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/

相关文章:

sql - ACE.OLEDB.12 的替代方案,用于查询 Excel 数据表

sql - sql中的having子句中的case语句

mysql - 在 web.config 中设置连接字符串是否存在安全漏洞? (ASP.NET MVC、 Entity Framework )

php - MySQL 和 PHP 的日期范围

MYSQL自动填充另一个表的列值

php - mysql 数据库中的复选框值

sql:创建调用函数的约束时出错

sql - 向具有检查约束 SQL 的表添加一列

mysql - 在 mysql View 中计算每个产品的运行余额

MySQL/Rails 性能 : One table, 多行与多表,少行?