当合并具有外键的表的两个数据库(具有相同的模式)时,有没有最佳实践?我正在寻找一种使用MySQL (或任何标准SQL语言特性)导出带有外键占位符的行并在导入时插入正确的新赋值的方法,一旦定义了外键的行(通过自动增量)已经赋值。
我可以通过SQL之外的编程来做到这一点,但我很好奇是否有更好的方法,只使用SQL或特定于MySQL的方法。
如果编程是唯一的选择,是否有推荐的方法(导出为JSON)?我的尝试很有效,但并不优雅,最终我自己编写了所有的导入方法,这容易出现错误和but。
发布于 2019-05-30 04:26:37
我不知道任何本机方法,但我在处理这种情况时的一般方法(如果我正确理解了您的问题-克隆将有2个表的数据,并通过外键连接到第二个表,该表恰好是第一个表上的标识列),如下所示:
注意:只有当第一个表(具有作为外键的identity列的表,也有一组唯一的不是identity列的列)才有效。这被称为"“(hat/tip @rd_nielsen)。希望您在第一个表上已经有了一个不是唯一键的唯一索引。
示例:表" t1“具有列id1, c1, c2, c3, c4
,表"t2”具有id2, id1, d1, d2, d3
,其中id1是t1中的标识列,是t2中的外键;c1+c2是t1中的自然键。
该技术依赖于建立一个临时转换表,将第二个表中的外键替换为第一个表的自然键,而不是第一个表的标识列。
c1+c2
)。-- Sybase语法。选择t1.c1、t1.c2、t2.d1、t2.d2、t2.d3到tempdb..t2_lookupable WHERE t1.id1 = t2.id1 --同时,让我们根据需要为t1构建可迁移的列(除了identity之外的所有列)选择t1.c1、t1.c2、t1.c3、t1.c4到tempdb..t1_lookupable
这可能涉及到在两个数据库之间进行合并,这相当于data,或者需要完成的任何其他操作。可以是bcp out/ in,也可以是其他方法-取决于您执行的操作。
--可以是BCP SELECT c1,c2,c3,c4 -- id1将自动填充,成为来自tempdb..t1_lookupable
SELECT t1.id1,t2t.d1,t2t.d2,t2t.d3 INTO FROM t1,tempdb..t2_lookupable t2t WHERE t1.c1 = t2t.c1 tempdb..t2_lookupable t1.c1 = t2t.c2
https://stackoverflow.com/questions/56367753
复制相似问题