如何解决外键不匹配错误?插入JobTypes表时遇报错求助
外键不匹配错误排查&修复
核心问题1:外键引用不匹配复合主键
你的Employees表主键是复合主键(Emp_ID, Proj_ID),这意味着单独的Emp_ID在Employees表中不是唯一标识(同一个员工可以关联多个项目)。但JobTypes表的外键只引用了Employees(Emp_ID),数据库无法确认这个Emp_ID对应的完整主键记录,必然触发外键不匹配错误。
核心问题2:表创建语句语法错误
JobTypes的创建语句里,每个约束定义后缺少分号,会导致语法解析失败,可能间接引发外键约束异常。
修正后的表创建语句
CREATE TABLE Projects ( Proj_ID INTEGER, Proj_name TEXT, PRIMARY KEY (Proj_ID) ); CREATE TABLE Employees ( Emp_ID INTEGER, Proj_ID INTEGER, Emp_fname TEXT, PRIMARY KEY(Emp_ID, Proj_ID), FOREIGN KEY(Proj_ID) REFERENCES Projects(Proj_ID) ); CREATE TABLE HourRates ( Job_type TEXT, Hour_rate TEXT, PRIMARY KEY(Job_type) ); CREATE TABLE JobTypes ( Emp_ID INTEGER, Proj_ID INTEGER, -- 新增Proj_ID字段,匹配Employees的复合主键 Job_type TEXT, PRIMARY KEY(Emp_ID), FOREIGN KEY (Emp_ID, Proj_ID) REFERENCES Employees(Emp_ID, Proj_ID), -- 引用完整复合主键 FOREIGN KEY (Job_type) REFERENCES HourRates(Job_type) );
插入数据的注意事项
- 必须按依赖顺序插入数据:先插
Projects,再插Employees(确保Proj_ID存在),接着插HourRates,最后插JobTypes - 插入
JobTypes时,Emp_ID和Proj_ID的组合必须在Employees表中存在;Job_type必须在HourRates表中存在
内容的提问来源于stack exchange,提问作者wizwhizz
相关产品推荐
相关产品推荐

