我想要合并2个数据库。它们都具有相同的架构。 第二个数据库以与第一个数据库相同的数据开始,但它们在特定日期分歧。
问题是某些表的ID继续从同一点自动递增,因此两个表对不同的数据使用相同的ID。我还应该提到,id在其他表中用作外键。
我想我可以在第二个数据库中为每个id添加一个值来删除冲突。这是否是可以接受的方式。如果是这样,那么最好的方法是什么。如果没有,那会是更好的方式。
答案 0 :(得分: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;
这是一个使用ON UPDATE CASCADE
选项创建外键的实例非常有用。您只需要修改主键列,并且更改将传播到将它们作为外键引用的表。
FOREIGN KEY (localcol) REFERENCES parent_tbl (parent_col) ON UPDATE CASCADE
答案 1 :(得分:1)
或者,在组合之前将其中一个数据库中的所有ID加倍。这样做的好处是很明显。您只需要在任何地方(包括外键)执行它,并且您通常可以告诉省略的表,因为某些ID将是奇数。
这可以推广到组合更多数据库。例如,对于三个数据库,一个应该是三的倍数,一个应该是倍数偏移+1,最后一个是偏移+2。