如何在MySql中合并两个数据库

发布于 2024-12-05 12:07:13 字数 349 浏览 1 评论 0原文

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

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

谢谢大家的帮助。

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

I need to merge two MySql databases.

  • DBtwo is a copy of DBone.
  • I added data to a table_x in DBone, and I added datas to a table_y in DBtwo.
  • I need to keep data added in DBOne, while merging all other edits –such as deleted entries- made in DBTwo.
  • Schemas, then, are identical, while each DB have different data from different tables.

Thank you all for your help.

Edit:
I was forgetting. I added columns to table_x that are foreign keys to table_y. So DBone has some entries that have been inserted without columns I added to table_x in DBtwo. :/

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

请叫√我孤独 2024-12-12 12:07:13

合并前您有原始数据库的副本吗?如果没有,你所要求的就是不可能的。问题是这样的:

原始数据库有这些记录:

{a, b, c}

在 table_x 中,添加 ad,所以现在有:

{a, b, c, d}

在表 y 中,删除 ab,所以有:

{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。

Do you have a copy of the original database before the merge? If not, what you are asking is impossible. Here is the problem:

The original database has these records:

{a, b, c}

In table_x, you add a d, so now you have:

{a, b, c, d}

In table y, you remove a b, so you have:

{a, c}

You now attempt to merge these two data sets:

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

Without reference to the original, how do you know whether b and d should be in the new set. If they weren't in the original and you added them since the fork, they should be included. If they were in the original and you deleted them in table_y since the merge, they should not be included.

Assuming you do have access, you'll want to do something like:

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

And then rename table_y to table_x (if you want table_x to be the new data source). If your ids are generated and you may have conflicts, you'll want to replace the * with a list of all the columns other than the id column to generate a new sequential id.

相思故 2024-12-12 12:07:13

你可以使用触发器。请参阅 MySQL 文档以了解有关触发器、函数和过程的实施。

You could use a trigger. Please see the MySQL documentation for your implementation regarding, triggers, functions and procedures.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文