【问题标题】:Consolidate multiple MySQL databases into one preserving referential integrity将多个 MySQL 数据库整合为一个保持参照完整性的数据库
【发布时间】:2010-09-02 12:01:32
【问题描述】:

我想将具有相同架构定义的众多 MySQL 数据库整合到一个数据库中。如果我从每个数据库中都有一个转储文件,我如何将它们全部导入同一个数据库而不会使它们的主键和外键发生冲突?

是否有一种相当简单的方法可以做到这一点,或者我是否需要编写一些自定义代码来理解数据并“手动”创建一组整合的记录?

【问题讨论】:

    标签: mysql import referential-integrity


    【解决方案1】:

    要么编写自定义代码,要么找出每个中的最大主键值并合并文件,但增加每个数据库中的主键,以免它们发生冲突。这是假设您不需要删除任何可能存在的重复项,这将是一个手动过程。

    【讨论】:

    • 在我的情况下,我很幸运我所有的外键都遵循“表名”_id 的命名约定。所以帐户的 FK 是 account_id。我现在正在做的是解析 SQL 语句的每个数据转储文件,并将每个表 ID 的现有最大值添加到该特定文件中。因此,如果我有:安装到配置文件(id,名称,描述,account_id)值(1,'foo','bar',1);如果当前的 max(account.id) 为 5,那么我将 5 添加到我在当前正在解析的文件中遇到的每个 account_id。希望一切都说得通。我将在此回复此方法的效果。
    • 是的,这是有道理的,这就是我的建议——我只是觉得你说得更好!
    • 呵呵,谢谢斯蒂芬。您的评论肯定让我知道该怎么做,实际上我忽略了重复的问题,因为我确实有一些实际上是“常量”的表。但我已经考虑过这一点,我可以做一些术后工作来筛选出这些 - 再次,正如你所说的“手动”。
    • “在我的例子中,我很幸运我的所有外键都遵循了 'table-name'_id 的命名约定。”
    • 等等.... 为什么要在文件中添加而不是在数据库本身中添加?如果您将 1,000,000 添加到 PK 或 FK 中的每一列,所有内容仍将相关...然后下一个数据库添加 2M 和 3M 等等...在数据库中执行然后导出。
    猜你喜欢
    • 1970-01-01
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    相关资源
    最近更新 更多