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

MySQL外键约束添加失败求助(错误码ER_FK_NO_INDEX_PARENT)

问题分析与解决

错误原因

  1. 表依赖关系完全颠倒:
    你把外键的指向搞反了。Etape_是存储所有步骤信息的基础表,应该是EtapexProjet_(项目-步骤关联表)去引用Etape_的idEtape,而不是反过来让Etape_引用关联表。

  2. 缺失索引导致外键约束失败:
    原代码中Etape_的外键指向EtapexProjet_的idEtape,但EtapexProjet_的主键是复合主键(idProjet, idEtape),idEtape不是单独的索引,MySQL要求被引用的列必须有索引(主键或普通索引),所以抛出ER_FK_NO_INDEX_PARENT错误。

修正后的建表代码

-- Client
CREATE TABLE IF NOT EXISTS jegere.client_ (
    idClient INT PRIMARY KEY,
    nomClient VARCHAR(45) NOT NULL,
    adresse VARCHAR(45) NOT NULL UNIQUE,
    telephone VARCHAR(45) NOT NULL UNIQUE,
    adresseCourriel VARCHAR(45) NOT NULL UNIQUE
);

-- Employés
CREATE TABLE IF NOT EXISTS jegere.Employe_ (
    idEmploye INT PRIMARY KEY,
    nomEmploye VARCHAR(45) NOT NULL,
    adresse VARCHAR(45) NOT NULL UNIQUE,
    telephone VARCHAR(45) NOT NULL UNIQUE,
    adresseCourriel VARCHAR(45) NOT NULL UNIQUE
);

-- Projet
CREATE TABLE IF NOT EXISTS jegere.Projet_ (
    idProjet INT PRIMARY KEY, 
    idClient INT ,
    nomProjet VARCHAR(45) NOT NULL ,
    dateDebut DATE NOT NULL ,
    dateFin DATE,
    idResponsable INT NOT NULL ,
    FOREIGN KEY (idClient ) REFERENCES jegere.Client_ (idClient ),
    FOREIGN KEY (idResponsable ) REFERENCES jegere.Employe_ (idEmploye )
);

-- RessourcesProjet
CREATE TABLE IF NOT EXISTS jegere.RessourcesProjet_ (
    idProjet INT NOT NULL,
    idEmploye INT NOT NULL,
    nbrHeure INT NOT NULL,
    PrixHeure FLOAT NOT NULL,
    PRIMARY KEY(idProjet, idEmploye),
    FOREIGN KEY(idProjet) REFERENCES jegere.Projet_(idProjet),
    FOREIGN KEY(idEmploye) REFERENCES jegere.Employe_(idEmploye)
);

-- Etapes(先创建基础步骤表)
CREATE TABLE IF NOT EXISTS jegere.Etape_ (
    idEtape INT PRIMARY KEY,
    nomEtape VARCHAR(45) NOT NULL,
    Livrable VARCHAR(100) NOT NULL
);

-- Etape X Projet(再创建关联表,引用基础表)
CREATE TABLE IF NOT EXISTS jegere.EtapexProjet_ (
    idEtape INT NOT NULL,
    idProjet INT NOT NULL,
    dateDebut DATE NOT NULL ,
    dateFin DATE,
    PRIMARY KEY(idProjet, idEtape),
    FOREIGN KEY(idProjet) REFERENCES jegere.Projet_(idProjet),
    FOREIGN KEY(idEtape) REFERENCES jegere.Etape_(idEtape) -- 改为引用Etape_的主键
);

关键修改点

  • 调整表的创建顺序:先创建Etape_基础表,再创建EtapexProjet_关联表
  • 移除Etape_中外键指向关联表的错误代码
  • 在EtapexProjet_中添加指向Etape_.idEtape的外键约束,符合"基础表被关联表引用"的逻辑
  • 修正原代码中引用表时省略schema(jegere.)的问题,避免因当前schema不一致导致的错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:01:10