我有一个带主键(main)的ÍD表和一个linked表。
现有数据
主要

ID | name
=========
1  | foo
2  | bar
3  | loo
4  | zoo

链接的
main_id
=======
     1
     1
     2
     2

有到main表中linked(1,2)的第一个条目的连接。
现在,从同一结构导入新数据:
导入数据
ID | name
=========
1  | new_foo
2  | new_bar
3  | new_loo
4  | new_zoo


main_id
=======
     3
     4
     3
     1

在导入过程中,ID表的mains将获得新的id(通过脚本完成)
ID | name
=========
1  | foo
2  | bar
3  | loo
4  | zoo
5  | new_foo
6  | new_bar
7  | new_loo
8  | new_zoo

但是main_id仍然具有来自导入数据的id:
main_id
=======
     1
     1
     2
     2
     3  => should be 7
     4  => should be 8
     3  => should be 7
     1  => should be 5  => * comment below

*我不能简单地更新linked如下:
UPDATE linked SET main_id = 5 WHERE main_id = 1

因为它也会更新前两行。
那么,如何将这些字段映射为新的主IDmain
我可以在导入
main_id
做导入
应用真实ID
UPDATE linked SET main_id = main_id + 10000000
把我的临时身份证还给原件。
UPDATE linked SET main_id = %realID WHERE main_id = %importedID
问题很明显:如果id高于10.000.000或者临时id高于BIGINT(9223372036854775807),那么这个方法就不能很好地工作(或者根本不能工作)。
它可以使用表的克隆,但这可能会导致内存消耗问题,因为UPDATE linked SET main_id = main_id - 10000000 WHERE main_id > 10000000表可能会变得很大。
我肯定有一个“最佳实践”的方法。

最佳答案

步骤如下:
Main表中选择最后一个ID:select @lastId := max(ID) from Main;
只需将要写入Linked表的所有id移动@lastId
像这样:insert into Linked select ID + @lastId from Imported_linked_data
不需要额外的步骤。

10-06 07:43