我得到错误1452,我该如何解决?

时间:2014-07-26 21:00:05

标签: mysql foreign-keys

我正在学习mysql,我尝试创建2个名为student的课程和学生表中的课程和列编号,课程表中的std_id是外键。但是当我想要插入每个表的数据时,我得到了“错误1452< 23000>不能添加或更新子行“。 这些是我的表: 学生:

CREATE TABLE student(
name VARCHAR(20) NOT NULL,
idnumber INT(3) NOT NULL,
email VARCHAR(50) NOT NULL,
phone INT(10) NOT NULL,
PRIMARY KEY (idnumber));

CREATE TABLE course(
course_id INT(5) NOT NULL,
std_id INT(3) NOT NULL,
std_name VARCHAR(20) NOT NULL,
course_name VARCHAR(40) NOT NULL,
score INT(2) NOT NULL,
PRIMARY KEY (course_id),
FOREIGN KEY (std_id) REFERENCES student(idnumber));

ALTER TABLE student
ADD FOREIGN KEY (idnumber)
REFERENCES course(std_id);

这是我在mysql中的代码。如果有人帮助我,我将不胜感激。

我为我糟糕的英语道歉。

1 个答案:

答案 0 :(得分:2)

你引入了一个很好的问题。使用ALTER TABLE,如果两个表都为空,则确保不插入任何行。

  • 要么从学生开始,那么你必须有一个有效的课程, 因为你说的是​​引用课程的列号 table不能为NULL。
  • 或者你从一门课程开始,那么你必须有一个有效的学生, 因为你说std_id列不能为NULL。

主要问题是,一名学生只能参加一门课程 - 每门课程只能有一名学生。事实上,学生可以参加几门课程 - 每门课程都可以有几个学生:多对多的关系

此解决方案是junction table

  • 从学生表中删除列ID号
  • 从课程表中删除列std_id
  • 创建一个新表格,例如student2courses,其中包含引用学生和课程表的列id_studentid_courses,其中包含唯一索引(id_student,id_courses)。

现在,您可以在没有课程的情况下插入新学生,并在没有学生的情况下插入新课程,并在需要时将学生分配到课程。