添加主键/外键并引用其他表

时间:2017-01-22 14:13:28

标签: mysql sql database

我在使用键引用方面遇到了一些麻烦。当我尝试将数据插入表标记

时,错误来自
INSERT INTO Mark(examID, studentID, result, occured, noOFAttempts) 
    VALUES ('B10', '1', '67', '11-JUL-07', '1');

我收到错误:

 integrity constraint  violated - parent key
not found

背景:

表格考试和学生代表有关大学考试的数据 学生们。考试成绩为学生,包括学生人数 学生在考试中的尝试(noOfAttempts),被录入 table使用Exam中的id列和来自的id列标记 学生。两个id列都具有唯一值。一个学生只有 每项考试记录的最新成绩。

编写SQL命令以创建Mark表。包括主键 在上面指定的表格中显而易见的外键。

CREATE TABLE Exam (
 id VARCHAR(255),
 subject VARCHAR(255),
 noOfStudents INT,
 PRIMARY KEY (id));

-

CREATE TABLE Student (
id INT,
name VARCHAR(255),
PRIMARY KEY (id));

-

CREATE TABLE Mark (
examID VARCHAR(255),
studentID INT,
result INT,
occured DATE,
noOFAttempts VARCHAR(255),
FOREIGN KEY (noOFAttempts) REFERENCES Exam(id), 
FOREIGN KEY (noOFAttempts) REFERENCES Student(id));

如何修复我知道错误引用的错误,谢谢

1 个答案:

答案 0 :(得分:2)

Mark表背后的一些逻辑对我有意义。它将考试与参加考试的学生联系起来。但是使noOfAttempts成为外键的动机似乎没有多大用处。该表中有 两个外键examIDstudentID,这两个字段的组合也是主键。以下是Mark定义可能用于避免这些错误的内容:

CREATE TABLE Mark (
    examID VARCHAR(255),
    studentID INT,
    result INT,
    occured DATE,
    noOFAttempts VARCHAR(255),
    FOREIGN KEY (examID) REFERENCES Exam(id), 
    FOREIGN KEY (studentID) REFERENCES Student(id),
    PRIMARY KEY (examID, studentID)
)

同样,我没有看到使noOfAttempts成为任何类型的密钥,而我认为它应该只是Mark表中的一个常规列。

根据戈登的要求编辑:

当您进行插入时,您试图在Mark中创建一条记录,该记录引用了不存在的父记录。对于原始表格,您尝试将'1'作为noOfAttempts插入,但Exam和/或Student表中不存在此ID。< / p>