合并具有冲突 ID 的 SQL 数据库

Gab*_*abe 0 mysql database merge

我有 2 个数据库想要合并。它们都有相同的架构。第二个数据库的起始数据与第一个数据库相同,但它们在特定日期出现了分歧。

问题是某些表的 id 继续从同一点自动递增,因此两个表对不同的数据使用相同的 id。我还应该提到 id 在其他表中用作外键。

我想我可以为第二个数据库中的每个 id 添加一个值来消除冲突。这是一种可以接受的方法吗?如果是这样,最好的方法是什么。如果没有的话,还有什么更好的办法呢。

Mic*_*ski 5

您可以向所有表的主键和外键值添加偏移量,请注意

  1. 数据库处于离线状态并且不接受更改
  2. 您不会错过任何主键或外键字段
  3. 显然你到处都添加了相同的偏移量。

更新语句示例:

UPDATE parent_tbl SET primary_key_col = primary_key_col + 5000;
UPDATE child_tbl SET foreign_key_col = foreign_key_col + 5000;
...
...
UPDATE parent_tbl_99 SET primary_key_col = primary_key_col + 5000;
UPDATE child_tbl SET_99 foreign_key_col = foreign_key_col + 5000;
Run Code Online (Sandbox Code Playgroud)

在这个例子中,使用该ON UPDATE CASCADE选项创建外键会非常有帮助。您只需修改主键列,并且更改将传播到将它们作为外键引用的表。

FOREIGN KEY (localcol) REFERENCES parent_tbl (parent_col) ON UPDATE CASCADE
Run Code Online (Sandbox Code Playgroud)