如何同步两个不相同的表?

Posted

技术标签:

【中文标题】如何同步两个不相同的表?【英文标题】:How to sync two tables that are not identical? 【发布时间】:2015-12-04 08:27:40 【问题描述】:

我有两个项目使用相同的数据。但是,此数据保存在 2 个不同的数据库中。这两个数据库中的每一个都有一个与另一个数据库中的对应表几乎相同的表。

我在寻找什么

我正在寻找一种方法来同步两个表。简单来说,如果database_one.table 获得插入,则需要将相同的记录插入到database2.table

数据库和表一

Table Products
| product_id | name | description | price | vat | flags |

数据库和表二

Table Articles
| articleId | name_short | name | price | price_vat | extra_info | flags |

问题

我从未使用过,也不知道如何使用任何数据库同步方法。我还担心的是这些表并不相同,因此我需要以某种方式将列相互映射。

例如:

database_one.Products.name -> database_two.articles.name_short

有人可以帮我解决这个问题吗?

【问题讨论】:

有一些方法可以解决这个问题——比如触发器等,但为什么要首先到达那里。您可以规范化“文章”表,然后只插入一个表。 @YosiDahari 这只是一个例子。实际的数据库处理大规模的数据。将我的所有代码转换为使用不同的数据库来获取数据几乎是不可能的。所以我需要同步它。 Triggers 怎么样? @YosiDahari 想在回答中详细说明这一点吗? 【参考方案1】:

您可以使用 MERGE 功能: https://www.mssqltips.com/sqlservertip/1704/using-merge-in-sql-server-to-insert-update-and-delete-at-the-same-time/

然后创建一个以所需频率运行的过程,或者如果它需要立即将合并插入触发器。

【讨论】:

【参考方案2】:

一种可能的方法是使用触发器。您需要在 database_one.table 上创建用于插入、更新和删除的触发器,该触发器在 database2.table 上执行相应的操作。我想,两个数据库之间的插入/更新/删除不会有任何问题。使用触发器时,您可以非常轻松地映射列。 但是,您需要考虑使用触发器的利弊 - 阅读 here 或 here 的内容。根据我的经验,性能非常重要,因此如果您的数据库负载很重,使用触发器进行数据复制不是一个好主意。 也许你也应该检查this?

【讨论】:

以上是关于如何同步两个不相同的表?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 django 在 mysql 中的两个不同模式中使用两个具有相同名称的表

如何同步两个mysql数据库中所有的表

如何对比两个相同数据库表的不同

我在数据库中建了两个字段完全相同的表

组合和连接两个不同编号的表。列和相同的列名

鉴于oracle中的表结构相同,如何从tableA更新tableB中数据不相同的行?