我有几个数据库,需要在它们之间交换数据。当我从db A导入导出到db B时,将发生Id冲突。我想出了两种方法,没有人满足我。
选择max(id)然后创建新的id以避免冲突,但是一个列存储json结构并包含id! (历史原因)。所以我需要创建新的Id(主键)并修改该json列中的所有ID。
或者我可以为每个数据导入添加批处理信息。当我导入数据时,我会找到sql中的每个id并在它们之前添加批处理ID。如:
原始数据库如:
ID COL_JSON
11 {id:11,name:xx ...}
我想插入一条新记录:11,插入后我在id
之前添加批量信息“1000”现在db看起来像
ID COL_JSON
11 {id:11,name:xx ...}
100011 {id:100011,name:xx ...}
下一批将是1001,1002 1003 ...,所以如果新的11条记录需要插入db看起来像
ID COL_JSON
11 {id:11,name:xx ...}
100011 {id:100011,name:xx ...}
100111 {id:100111,name:xx ...}
虽然这两种方法可以解决冲突,但我觉得这两种方法都很愚蠢。有一些优雅的计划吗?
答案 0 :(得分:1)
对于遗留系统,没有更好的方法,除非与它对齐。我们无法在遗留系统上进行更多更改,因此您的第二种方法似乎很好。坦率地说,这不是愚蠢而且是正确的方法。
答案 1 :(得分:0)
我不清楚你的数据库交换的确切内容。
如果您需要两个数据库中的数据,您可以使用与您的批次类似的东西,但使用字符 - A11和B11 ID。
这样即使您的数据库增长很多,也不会有冲突。
编辑:您还可以创建一个包含两个字段的主键:带有自动增量的整数ID和原始数据库名称的varchar。
答案 2 :(得分:0)
当我有一个应该同步的表(不是动态)时,我使用这种方法:
唯一的要求是确保主表设置了足够大的自动更新,因此辅助表ID永远不会到达主表ID