mysql - 使用外键将表拆分为 2 个表
问题描述
我有一张桌子,需要分成 2 张桌子。一张表是一般信息,另一张表是更具体的信息。让我们打电话给他们general_table
和farming_table
。
farming_table
需要有一个外键允许我将它链接到general_table
. 我不确定如何将数据插入到general_table
然后获取新创建的行的 id 并在我为farming_table
.
我试过使用这段代码:
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,当我运行上面的代码时,外键将不匹配。将从 1 开始,general_table_id
但应该从 11 开始。
我知道我可以通过将 更改CROSS JOIN
为 this 来手动更改它,CROSS JOIN (select @rownum := 10) r;
但假设我不知道最后一个 IDgeneral_table
是什么。
如果有人能想到一种更强大的方法来实现我的目标,我将不胜感激。谢谢!
解决方案
推荐阅读
- vb.net - LINQ 从 2 个数据表中选择所有列并作为 1 个数据表返回 VB.NET
- php - 从 url 替换特定值
- linux - 将坏文件转换为正确的格式
- database - 没有这样的列:False 插入 SQLite 数据库时
- javascript - 我的 JavaScript 代码为 getElementById 返回 null
- elasticsearch - 连接到elasticsearch集群时docker ELK stack的Search-guard插件出现问题
- php - Woocommerce 哪个模板包含自定义结帐字段?
- python - heapq:将自定义优先级键与不可比较的关联数据一起使用的优雅方法是什么?
- monitoring - 在具有数千个 PM 计数器的现有大型系统中实施 Prometheus 端点
- ios - 自我的内部结构是什么?