Mysql 组合具有冲突ID的SQL数据库

Mysql 组合具有冲突ID的SQL数据库,mysql,database,merge,Mysql,Database,Merge,我有两个数据库,我想合并。它们都有相同的模式。 第二个数据库以与第一个数据库相同的数据开始,但在特定日期出现分歧 问题是某些表的ID继续从同一点自动递增,因此两个表对不同的数据使用相同的ID。我还应该提到,ID在其他表中用作外键 我在想,我可以给第二个数据库中的每个id添加一个值来消除冲突。这是一种可以接受的方式吗。如果是这样,最好的方法是什么。如果没有,还有什么更好的方法。您可以为所有表的主键值和外键值添加一个偏移量,注意这一点 数据库处于脱机状态,不接受更改 您不会遗漏任何主键或外键字段 显

我有两个数据库,我想合并。它们都有相同的模式。 第二个数据库以与第一个数据库相同的数据开始,但在特定日期出现分歧

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


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

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

  • 数据库处于脱机状态,不接受更改
  • 您不会遗漏任何主键或外键字段
  • 显然,在所有位置添加相同的偏移量
  • 示例更新语句:

    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;
    
    在这个例子中,使用更新级联时的
    选项创建外键将非常有用。您只需修改主键列,更改就会传播到作为外键引用它们的表中

    FOREIGN KEY (localcol) REFERENCES parent_tbl (parent_col) ON UPDATE CASCADE
    

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

  • 数据库处于脱机状态,不接受更改
  • 您不会遗漏任何主键或外键字段
  • 显然,在所有位置添加相同的偏移量
  • 示例更新语句:

    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;
    
    在这个例子中,使用更新级联时的
    选项创建外键将非常有用。您只需修改主键列,更改就会传播到作为外键引用它们的表中

    FOREIGN KEY (localcol) REFERENCES parent_tbl (parent_col) ON UPDATE CASCADE
    

    或者,在组合之前,将其中一个数据库中的所有ID加倍。这样做的好处很明显。您只需在任何地方都执行此操作(包括外键),并且通常可以告诉表哪些被省略,因为某些ID是奇数


    这可以推广到组合更多的数据库。例如,对于三个数据库,一个应具有三的倍数,一个应为倍数偏移+1,最后一个应为+2。

    或者,在组合之前,将其中一个数据库中的所有ID加倍。这样做的好处很明显。您只需在任何地方都执行此操作(包括外键),并且通常可以告诉表哪些被省略,因为某些ID是奇数


    这可以推广到组合更多的数据库。例如,对于三个数据库,一个应该是3的倍数,一个应该是+1的倍数,最后一个是+2的倍数。

    我希望您知道克隆前的id,因为这些初始id不应该更改。我希望您知道克隆前的id,因为这些初始id不应该更改