如何对关联recipe和ingredient表的junction关联表进行插入操作
关联表插入数据的两种实现方式
方式1:直接手动插入ID(最常用)
如果你已经明确知道要关联的recipe_id和ingredient_id的值,直接写简单INSERT语句就可以,这是最常用也最高效的方式。
示例:要给ID为2的Pizza食谱,关联ID为2的三文鱼食材,语句如下:
INSERT INTO 你的关联表名 (recipe_id, ingredient_id) VALUES (2, 2);
适合场景:前端提交数据时已经选中了对应的食谱、食材,后端能直接拿到两个ID的情况。
方式2:通过关联父表自动查询ID插入
如果你不知道具体的ID值,只知道食谱和食材的名称,不需要手动先查父表再插,可以用子查询的方式一步完成插入,避免手动查ID出错。
示例:要给名为Fish的食谱,关联名为Tomato sauce的食材,语句如下:
INSERT INTO 你的关联表名 (recipe_id, ingredient_id) SELECT r.recipe_id, i.ingredient_id FROM recipe r CROSS JOIN ingredient i WHERE r.name = 'Fish' AND i.name = 'Tomato sauce';
适合场景:只有业务名称、没有主键ID的批量插入,或者脚本跑数的场景。
注意事项
- 建议给关联表的
recipe_id和ingredient_id联合加唯一约束:UNIQUE (recipe_id, ingredient_id),避免重复插入相同的关联关系产生冗余数据。 - 建议给关联表加外键约束,确保插入的
recipe_id、ingredient_id在父表中真实存在,避免产生无效关联。
内容的提问来源于stack exchange,提问作者zupus
相关产品推荐
相关产品推荐

