【发布时间】: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