【问题标题】:SQL Developer - Integrity Constraint , parent key not found ( while inserting values )SQL Developer - 完整性约束,未找到父键(插入值时)
【发布时间】:2026-01-28 12:55:01
【问题描述】:

我知道,为了在依赖于外键的表中插入值,您需要在该表的主键中包含数据。

这些是我的限制:

 ALTER TABLE DIDACT
   MODIFY (CONSTRAINT id_prof_fk FOREIGN KEY(id_prof) REFERENCES profs (id_prof));

 ALTER TABLE DIDACT
   MODIFY (CONSTRAINT id_course_fk FOREIGN KEY(id_course) REFERENCES courses (id_course));

接下来我在教授和课程表中插入值:

INSERT INTO courses VALUES ('21', 'Logic', 1, 1, 5);
INSERT INTO courses VALUES ('22', 'Math', 1, 1, 4);
INSERT INTO courses VALUES ('23', 'OOP', 1, 2, 5);
INSERT INTO courses VALUES ('24', 'DB', 2, 1, 8);
INSERT INTO courses VALUES ('25', 'Java', 2, 2, 5);

INSERT INTO profs VALUES ('p1', 'Mary', 'Banks', 'Prof');
INSERT INTO profs VALUES ('p2', 'Francis', 'Steven', 'Conf');
INSERT INTO profs VALUES ('p3', 'John', 'Jobs', 'Prof');
INSERT INTO profs VALUES ('p4', 'Alex', 'Brown', 'Prof');
INSERT INTO profs VALUES ('p5', 'Dan', 'Lovelace', 'Lect');
INSERT INTO profs VALUES ('p6', 'Roxanne', 'Smith', 'Conf');

然后我尝试填充 DIDACT 表:

INSERT INTO didact VALUES ('p1','21');
INSERT INTO didact VALUES ('p3','21');
INSERT INTO didact VALUES ('p5','22');

但是会发生这种情况:

INSERT INTO didact VALUES ('p1','21') 错误报告 - SQL 错误: ORA-02291: 违反完整性约束 (user.ID_COURSE_FK) - 父级 未找到密钥 02291. 00000 - “违反完整性约束 (%s.%s) - 未找到父键” *原因:外键值没有匹配的主键值。 *操作:删除外键或添加匹配的主键。

这些是我的表格,以防万一:

CREATE TABLE courses(
  id_course CHAR(2),
  course_name VARCHAR2(15),
  year NUMBER(1),
  semester NUMBER(1),
  credits NUMBER(2)
  )

CREATE TABLE profs(
  id_prof CHAR(4),
  name CHAR(10),
  surname CHAR(10),
  grade VARCHAR2(5)
  )

CREATE TABLE didact(
  id_prof CHAR(4),
  id_course CHAR(4)
  )

我为此苦苦挣扎了大约一个小时,但仍然没有找到我的错误。

谢谢。

【问题讨论】:

  • 一般规则:永远不要使用char(x),除非你真的知道自己在做什么。
  • 为什么您对某些列使用 CHAR 而不是 VARCHAR2?
  • 是的......这是一个愚蠢的错误我通常使用 CHAR 来提高 db 的性能,但我忘记了固定长度问题和空白......

标签: sql oracle foreign-keys


【解决方案1】:

您的表格中id_course 的格式似乎不同。在didact 中是id_course CHAR(4),在courses 中是id_course CHAR(2)

由于您使用的是固定长度类型,didact 中的值将与 courses 中的值相差两个空格。

【讨论】: