将SQL数据库与冲突的ID组合在一起

时间:2011-10-30 22:10:00

标签: mysql database merge

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

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

我想我可以在第二个数据库中为每个id添加一个值来删除冲突。这是否是可以接受的方式。如果是这样,那么最好的方法是什么。如果没有,那会是更好的方式。

2 个答案:

答案 0 :(得分:3)

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

  1. 数据库处于脱机状态且不接受更改
  2. 您不会错过任何主要或外国关键字段
  3. 你显然在任何地方添加相同的偏移量。
  4. 示例更新语句:

    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。