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

插入不匹配的client与VIN到service表未按预期报错的原因是什么

问题原因

当前service表的两个外键是独立校验的:

  • fk_client的外键仅校验传入的客户ID是否在cars表的fk_client列存在,ID为1的客户在cars表存在对应记录,所以校验通过
  • fk_vin的外键仅校验传入的VIN是否在cars表的vin列存在,2234在cars表存在对应记录,所以校验通过
    两个外键没有绑定关联校验,自然不会触发你预期的匹配校验逻辑。

解决方案

你可以通过给service表添加联合外键约束实现校验,要求(fk_client, fk_vin)的组合必须在cars表的(fk_client, vin)列中存在对应匹配的记录。
修改service表的创建语句如下:

create table service (
    id BIGSERIAL primary key,
    fk_client BIGSERIAL,
    fk_vin VARCHAR(20),
    -- 替换原独立外键为联合外键
    FOREIGN KEY(fk_client, fk_vin) references cars(fk_client, vin)
);

修改后再执行测试插入语句insert into service (fk_client, fk_vin) values (1,'2234');就会触发外键约束报错,符合你的预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:36:07