【问题标题】:How to merge two databases in MySqlMySql如何合并两个数据库
【发布时间】:2011-11-18 20:52:50
【问题描述】:

我需要合并两个 MySql 数据库。

  • DBtwo 是 DBone 的副本。
  • 我在 DBone 中的 table_x 中添加了数据,在 DBtwo 中的 table_y 中添加了数据。
  • 我需要在 DBOne 中保留添加的数据,同时合并在 DBTwo 中进行的所有其他编辑(例如已删除的条目)。
  • 因此,架构是相同的,而每个数据库都有来自不同表的不同数据。

感谢大家的帮助。

编辑: 我忘记了。我向 table_x 添加了作为 table_y 外键的列。因此,DBone 插入了一些条目,而这些条目没有我添加到 DBtwo 中的 table_x 的列。 :/

【问题讨论】:

  • 您好,感谢您提供的链接,我也在发布我的问题之前进行了 Google 搜索。这里的问题是本教程解释了如何合并两个,而不是两个数据库。此外,它谈到了两个完全相等的模式,而在我的例子中,我在不同的表中更改并添加了一些列。

标签: mysql database merge schema phpmyadmin


【解决方案1】:

在合并之前您有原始数据库的副本吗?如果不是,那么你所问的就是不可能的。问题来了:

原始数据库有这些记录:

{a, b, c}

在 table_x 中,你添加了一个 d,所以现在你有:

{a, b, c, d}

在表 y 中,你删除了 a b,所以你有:

{a, c}

您现在尝试合并这两个数据集:

{a, b, c, d}
{a, c}

不参考原文,怎么知道b和d是否应该在新集合中。如果它们不在原版中,并且您在分叉后添加了它们,则应该包含它们。如果它们在原始文件中,并且您在合并后在 table_y 中删除了它们,则不应包含它们。

假设您确实有访问权限,您需要执行以下操作:

insert into table_y
select *
from table_x x
where x.id not in (select id from table_x_original)

然后将 table_y 重命名为 table_x(如果您希望 table_x 成为新的数据源)。如果您的 id 已生成并且您可能有冲突,则您需要将 * 替换为除 id 列之外的所有列的列表以生成新的顺序 id。

【讨论】:

    【解决方案2】:

    您可以使用触发器。有关触发器、函数和过程的实现,请参阅 MySQL 文档。

    【讨论】:

    • 有趣的功能 (MySql trigger functions reference) 但在我的情况下如何使用它们?
    • 当您更新 DBOne.table_x 时,触发器可能会将更改复制到 DBTwo.table_y。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 2017-05-05
    相关资源
    最近更新 更多