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

创建FAQ表关联Product表时遇MySQL外键定义错误求助

解决外键关联错误:Key reference and table reference don't match

问题根源

你的错误来自两个核心问题:

  1. 外键字段数量不匹配:Product表的主键是复合主键(id, version_id),但FAQ表的外键只使用了product_id单个字段,外键要求引用字段的数量、类型必须和被引用的主键/唯一键完全一致。
  2. 非空约束与删除规则冲突:FAQ表的product_id被设置为NOT NULL,但外键规则写了ON DELETE SET NULL,这显然矛盾——非空字段不能被设为NULL。

修正方案(二选一)

方案1:FAQ关联Product的具体版本(保留复合主键关联)

如果业务需要FAQ绑定到Product的特定版本,需在FAQ表中同时存储product_id和version_id,并建立复合外键:

CREATE TABLE `faq` (
    `id` BINARY(16) NOT NULL,
    `question` VARCHAR(255) NULL,
    `answer` VARCHAR(255) NULL,
    `product_id` BINARY(16) NOT NULL,
    `product_version_id` BINARY(16) NOT NULL, -- 新增对应version_id的字段
    `created_at` DATETIME(3) NOT NULL,
    `updated_at` DATETIME(3) NULL,
    PRIMARY KEY (`id`),
    KEY `fk_faq_product` (`product_id`, `product_version_id`),
    CONSTRAINT `fk_faq_product` FOREIGN KEY (`product_id`, `product_version_id`) 
        REFERENCES `product` (`id`, `version_id`) 
        ON DELETE CASCADE -- 替换SET NULL,或根据业务需求将product_id设为NULL并移除NOT NULL约束
        ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

方案2:FAQ只关联Product本身(忽略版本)

如果FAQ无需绑定特定版本,只需关联Product主体,需先给Product表的id字段单独创建唯一索引(外键只能引用主键或唯一键),再修改FAQ的外键:

  1. 给Product表添加唯一索引:
ALTER TABLE `product` ADD UNIQUE INDEX `idx_product_id` (`id`);
  1. 修改FAQ表的外键定义:
CREATE TABLE `faq` (
    `id` BINARY(16) NOT NULL,
    `question` VARCHAR(255) NULL,
    `answer` VARCHAR(255) NULL,
    `product_id` BINARY(16) NOT NULL,
    `created_at` DATETIME(3) NOT NULL,
    `updated_at` DATETIME(3) NULL,
    PRIMARY KEY (`id`),
    KEY `fk_faq_product_id` (`product_id`),
    CONSTRAINT `fk_faq_product_id` FOREIGN KEY (`product_id`) 
        REFERENCES `product` (`id`) 
        ON DELETE CASCADE -- 若删除Product时需保留FAQ,可将product_id设为NULL并移除NOT NULL约束
        ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 22:22:33