【发布时间】:2017-05-05 16:28:18
【问题描述】:
我有两个数据库,我需要将两个数据库合并到一个数据库中。例如
let_client1(与 let_client2 数据库相同的字段和表号)
let_client2
我在两个数据库中都有 99 个表,两个数据库中也有 5 个视图。
有很多索引、主键和外键关系,所以我如何将两个数据库合并到一个数据库中。 Mysql有什么最好的方法吗?
【问题讨论】:
标签: mysql
我有两个数据库,我需要将两个数据库合并到一个数据库中。例如
let_client1(与 let_client2 数据库相同的字段和表号)
let_client2
我在两个数据库中都有 99 个表,两个数据库中也有 5 个视图。
有很多索引、主键和外键关系,所以我如何将两个数据库合并到一个数据库中。 Mysql有什么最好的方法吗?
【问题讨论】:
标签: mysql
作为起点,您可以像这样使用 insert into select 语句:
INSERT INTO let_client1.table1 (field1, field2, etc)
SELECT field1, field2, etc
FROM let_client2.table1
这会将let_client2.table1中的数据合并到let_client1.table1中,但是要注意主键违规和外键限制,因此您需要先对具有依赖项的表执行此操作。
如果您想要一个纯粹的自动解决方案,我建议您使用游标来选择表并将它们的名称传递给执行合并的过程,但是您很容易遇到我刚才描述的问题。 http://dev.mysql.com/doc/refman/5.7/en/cursors.html
关于索引,如果他们需要转移,这里有一个相关的问题已经有了答案:MySql, how can I export indexes from my development database to my production database?
【讨论】:
没有一种简单的方法可以做到这一点,因为它取决于表定义。
如果您使用自增主键,您的两个数据库可能都使用相同的值。这些必须以某种方式进行调整。
外键约束要求您的表以特定顺序加载。或者你可以在加载数据时使用SET FOREIGN_KEY_CHECKS=0。
我认为您必须编写一个脚本来以适合您特定情况的方式进行数据合并。
您可以使用 INFORMATION_SCHEMA 获取表列表和外键约束列表。
您不必传输索引或视图。当您将数据加载到表中时,它们都会被填充。 MySQL 视图不存储数据,它们只查询基表。
【讨论】: