背景资料
出于某种原因,在从 xml 向多个表中插入大量数据时,我的主键被偏移了一个偏移量。(可能是因为多次尝试失败:P)
我有两张桌子.. tableA 和 tableB。他们是一对一的关系。tableA 是父表,并且具有主键列...例如 DataIndex。
现在DataIndex已经出现了这样的..
685、686、687……等等。
子表即TableB中存在的相应值是相同的。
问题
如何将值向上移动,以便 DataIndex 从 1、2、3..等开始;在两个表中?
我假设主键实际上是一个标识列,它在插入时自动递增。您需要做的是“重新播种”身份列。您可以通过重命名表,使用原始名称创建一个重复表,然后将旧表中的数据插入新表(主键字段将被重置并再次从 1 自动递增)来执行此操作。进行插入时,请确保将旧主键值作为附加列包含在其他表中以供参考。
要匹配相关表,您需要做的就是UPDATE
在旧主键值上执行并加入新表:
UPDATE tableB SET
PRIMARYKEYCOLUMN = tableA.PRIMARYKEYCOLUMN
FROM tableA
WHERE
tableA.OLDPRIMARYKEYCOLUMN = tableB.PRIMARYKEYCOLUMN
更改种子可能涉及身份列删除和重新创建。
我会做以下事情:
ALTER
所有 FK,添加ON UPDATE CASCADE
子句。此步骤可能不适用于某些数据库,您可能需要再次DROP
进行CREATE
约束;SELECT min(id) FROM tableA;
UPDATE tableA SET id = id - min_id + 1;
ON UPDATE CASCADE
子句。请注意,根据tableA
您使用的大小和数据库引擎,完全重建表以避免数据文件膨胀可能会更快、更容易。