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

MySQL创建gatt_descriptors表报1005错误 errno150外键约束格式错误

错误原因

外键约束创建失败的核心原因是InnoDB引擎的外键规则不满足,具体为以下两点:

  1. 外键引用的父表列组合必须存在对应索引:你在gatt_descriptors中定义的外键需要引用gatt_characteristics表的(char_name, service_name, version)三个列的组合,但gatt_characteristics当前仅为char_name单列创建了主键索引,没有这三个列的联合索引,无法匹配外键要求。
  2. 外键列和被引用列的属性必须完全一致:gatt_descriptors中char_name字段定义为允许为NULL,但父表gatt_characteristics的char_name是主键,属性为NOT NULL,二者属性不匹配。

另外还有一个之前建表时遗留的潜在问题:gatt_characteristics中引用gatt_services的外键仅单独引用了service_name列,但gatt_services的主键是(service_name, version)联合主键,单独引用单列本身也不符合外键规则,只是之前没有触发报错。

解决方案

按以下步骤调整即可:

  1. 修复gatt_characteristics的外键和索引配置
-- 首先查看gatt_characteristics原有外键名称
SHOW CREATE TABLE gatt_characteristics;
-- 删除原有引用gatt_services的错误外键,将下方<外键名>替换为你查到的实际名称
ALTER TABLE gatt_characteristics DROP FOREIGN KEY <外键名>;
-- 新增符合gatt_services联合主键的联合外键
ALTER TABLE gatt_characteristics ADD FOREIGN KEY (service_name, version) REFERENCES gatt_services(service_name, version) ON DELETE RESTRICT ON UPDATE CASCADE;
-- 给(char_name, service_name, version)添加联合索引,满足后续外键引用要求
-- 你也可以直接将这三个列设为联合主键,和其他表的设计风格保持一致
CREATE INDEX idx_char_serv_ver ON gatt_characteristics(char_name, service_name, version);
  1. 修改gatt_descriptors的建表语句,修正char_name的属性
CREATE TABLE gatt_descriptors(
    descriptor_name VARCHAR(25) NOT NULL,
    uuid VARCHAR(36),
    id VARCHAR(36),
    val_const BIT,
    init_val VARCHAR(25),
    var_length BIT,
    val_length INT,
    read_val VARCHAR(7),
    write_val VARCHAR(7),
    version INT NOT NULL, 
    service_name VARCHAR(25) NOT NULL,
    char_name VARCHAR(25) NOT NULL, -- 新增NOT NULL和父表属性匹配
    FOREIGN KEY (char_name, service_name, version) REFERENCES gatt_characteristics (char_name, service_name, version) ON DELETE RESTRICT ON UPDATE CASCADE,
    CONSTRAINT pk_verserchardescr PRIMARY KEY (descriptor_name, char_name, service_name, version));

执行完以上调整后即可正常建表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:48:03