You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在含外键关联的两张MySQL表中插入新记录?

如何插入关联外键的两张表记录

嘿,针对你的问题,我来一步步说清楚怎么写对应的INSERT语句~

首先要明确:因为kontrola表的naruszenie_id是关联naruszenie表的外键,所以插入顺序很关键——必须先确保naruszenie表中有对应的记录,才能插入kontrola的关联数据,否则会触发外键约束报错。

情况1:插入全新的违规记录+对应的检查记录

如果要插入的违规内容在naruszenie表中还不存在,得先插naruszenie,再插kontrola:

第一步:插入naruszenie表

假设你的naruszenie表只有id(自增主键)和naruszenie两个字段,插入语句如下:

INSERT INTO naruszenie (naruszenie) VALUES ('未按要求提交安全报告');

如果id是自增字段,数据库会自动生成这个记录的ID,我们可以用PHP的insert_id属性获取这个ID,方便后续关联。

第二步:插入kontrola表关联刚创建的违规记录

用刚才获取到的naruszenie记录ID,插入kontrola表:

// 先执行插入naruszenie的操作
$connecting->query("INSERT INTO naruszenie (naruszenie) VALUES ('未按要求提交安全报告')");
// 获取刚插入的违规记录ID
$new_naruszenie_id = $connecting->insert_id;

// 插入kontrola表,关联这个ID
$insert_kontrola_sql = "INSERT INTO kontrola (podmiot, miasto, wszczeto, zakonczono, naruszenie_id) 
                       VALUES ('XX贸易公司', '格但斯克', '2024-05-10', '2024-05-10', $new_naruszenie_id)";
$connecting->query($insert_kontrola_sql);

情况2:插入关联已有违规记录的检查记录

如果要关联的违规内容已经在naruszenie表中存在(比如已知它的id是5),直接插入kontrola表即可:

INSERT INTO kontrola (podmiot, miasto, wszczeto, zakonczono, naruszenie_id) 
VALUES ('YY餐饮门店', '波兹南', '2024-05-11', '2024-05-11', 5);

几个需要注意的点

  • 外键约束:一定要保证kontrola的naruszenie_id值在naruszenie表中存在,否则数据库会抛出外键冲突的错误
  • 数据格式:wszczeto和zakonczono是日期类型,要确保插入的字符串格式符合数据库要求(比如标准的YYYY-MM-DD)
  • 自增主键:如果你的kontrola表的id也是自增的,INSERT时不需要指定id字段,数据库会自动生成

内容的提问来源于stack exchange,提问作者killerbees

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:27:21