1

我在没有连接到互联网的不同地方创建了 3 个数据库。

DB A 是总部数据库

DB B 是分支机构 1 数据库

DB C 是分支机构 2 数据库

每天晚上我需要将事务表中的数据从 B & C 复制到 A。并在第二天早上将 A 数据复制到 B & C 以使库存数据同步。

事务表由 2 个表组成

1. 事务主管

| 身份证 | TRX_NUMBER | 日期 | 客户 ID |

2. 交易明细

| 身份证 | TRANSACTION_MASTER_ID | 项目 ID | 数量 | 价格 | 总计 |

transaction-details.TRANSACTION_MASTER_ID 是 transaction-master.ID 的外键

问题是 transaction-master.ID 是自动增量值,那么如何将transaction-master 和 transaction-details数据复制到 A 而不破坏transaction-master 和 transaction-details 外键值

因为如果在 B 上我的表有 1 作为 transaction-master.ID 值,那么当我将 B 数据插入 A 时,可能 1 已经在使用中并且将变为 2(因为自动递增)并且会导致事务上的外键-details.TRANSACTION_MASTER_ID 将中断

解决此问题的最佳做法是什么?

解决方案: 我从 IRC 上的 MySQL 频道得到了很好的解决方案,在 MySQL 上使用“auto_increment_offset”和“auto_increment_increment”

设置 auto_increment_offset A: 1, B: 2, C:3

在 A、B 和 C 上设置 auto_increment_increment 3

这样每个分支上的主键永远不会相同

4

1 回答 1

0

我可以想到两种简单的方法:

  1. 不要使用自动增量。例如,使用 UUID。或者:

  2. 向 Transaction-master 添加另一个字段siteId,并使其成为复合键的一部分。然后,使用Transaction_master_IDsiteId作为交易细节的外键。请参阅此问题的第 4 个答案以了解如何执行此操作:MySQL 中的多列外键?

于 2013-08-07T08:45:29.623 回答