如何在含外键关联的两张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
相关产品推荐
相关产品推荐

