我有一张桌子,需要将其拆分为2个桌子。一个表是一般信息,另一个表是更具体的信息。让我们称它们为general_table
和farming_table
。
farming_table
需要有一个外键,以便我可以将其链接到general_table
。我不确定如何将数据插入general_table
,然后获取新创建的行的ID,并在为farming_table
创建行时使用该ID。
我尝试使用此代码:
INSERT INTO `general_table` (name, year)
SELECT name, year
FROM `original_table`;
INSERT INTO `farming_table` (general_table_id, seeds, vehicles)
SELECT @rownum := @rownum + 1, seeds, vehicles
FROM `original_table`
CROSS JOIN (select @rownum := 0) r;
如果您只想运行一次,则上面的代码是完美的。如果后来在general_table
已经有数据的情况下不得不再次运行它,可以说它有10行数据,那么下一个ID将是11,当我运行上述代码时,外键将不匹配。 general_table_id
将从1开始,但应从11开始。
我知道我可以通过将CROSS JOIN
更改为此CROSS JOIN (select @rownum := 10) r;
来手动更改此设置,但是假设我不知道general_table
中的最后一个ID是什么。
如果有人能想到实现我的目标的更强大的方法,我将非常感激。谢谢!