Mysql 组合具有冲突ID的SQL数据库
我有两个数据库,我想合并。它们都有相同的模式。 第二个数据库以与第一个数据库相同的数据开始,但在特定日期出现分歧 问题是某些表的ID继续从同一点自动递增,因此两个表对不同的数据使用相同的ID。我还应该提到,ID在其他表中用作外键Mysql 组合具有冲突ID的SQL数据库,mysql,database,merge,Mysql,Database,Merge,我有两个数据库,我想合并。它们都有相同的模式。 第二个数据库以与第一个数据库相同的数据开始,但在特定日期出现分歧 问题是某些表的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不应该更改