我需要在SQL中创建一个名为LFM_Enroll的表,该表具有Student_ID和Section_Number的复合主键。 Student_ID也是外键,它引用LFM_Student表中的Student_ID,Section_Number也是外键,它引用LFM_Section表中的Section_Number。如何编写约束和外键?我附上了桌子的图像,下面是我到目前为止所做的。创建LFM_Enroll表后,我需要更新一行。我试过这样做,但一直得到以下错误。
: Error starting at line : 173 in command -
UPDATE LFM_Enroll
SET Student_ID = 1234567,
Section_Number = 01234
WHERE Student_ID = 900000 AND Section_Number = 4138
Error report -
ORA-02291: integrity constraint (SYSTEM.FK_LFM_ENROLL_SECTION_NUMBER) violated - parent key not found.
Tables先谢谢你的帮助。
CREATE TABLE LFM_Enroll (
Student_ID char(7),
Section_Number char(4),
constraint PK_LFM_Enroll Primary Key (Student_ID,Section_Number),
constraint FK_LFM_Enroll_Student_ID
Foreign Key (Student_ID,Section_Number) references LFM_Student (Student_ID),
constraint FK_LFM_Enroll_Section_Number
Foreign Key (Student_ID,Section_Number) references LFM_Section (Section_Number)
);
答案 0 :(得分:2)
您的外键限制是不对的。您正尝试将两列{Student_ID
,Section_Number
}映射到一列LFM_Student.Student_ID
。
主键中的列数必须与外键中的列数相匹配。换句话说,键LFM_Student
是一列(Student_ID
),因此外键也需要是单个匹配列 - 在本例中为LFM_Enroll.Student_ID
。正确的DDL将是:
constraint FK_LFM_Enroll_Student_ID
Foreign Key (Student_ID) references LFM_Student (Student_ID),
constraint FK_LFM_Enroll_Section_Number
Foreign Key (Section_Number) references LFM_Section (Section_Number)
我不太清楚为什么你的RDBMS允许你拥有你的东西,但它可能正在使用第一列而只是忽略第二列。在这种情况下,FK_LFM_Enroll_Section_Number
正在创建外键LFM_Enroll.Student_ID
=> LFM_Section.Section_Number
。
答案 1 :(得分:1)
错误表示您尝试更新两列的值可能不存在于Student和/或Sections表中,即学生表中不存在1234567
和/或{{1}您的节表中不存在。您应该尝试插入新行或使用您尝试使用更新外键的新值更新现有行。
[编辑:用于定义约束,请参阅lc。的帖子]