Mysql 我得到了错误1452,我如何解决它?

Mysql 我得到了错误1452,我如何解决它?,mysql,foreign-keys,Mysql,Foreign Keys,我正在学习mysql,我尝试创建两个表,分别命名为student和course,student表中的列idnumber和course表中的std_id是外键。但当我想向每个表中插入数据时,我得到了“错误1452无法添加或更新子行”。 这些是我的桌子: 学生: 这是我在mysql中的代码。如果有人帮助我,我将不胜感激 很抱歉我的英语不好。你提出了一个很好的问题。使用ALTER TABLE可以确保在两个表都为空的情况下不能插入任何行 要么你从一个学生开始,然后你必须有一个有效的课程, 因为你说参考

我正在学习mysql,我尝试创建两个表,分别命名为student和course,student表中的列idnumber和course表中的std_id是外键。但当我想向每个表中插入数据时,我得到了“错误1452无法添加或更新子行”。 这些是我的桌子: 学生:

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


很抱歉我的英语不好。

你提出了一个很好的问题。使用ALTER TABLE可以确保在两个表都为空的情况下不能插入任何行

  • 要么你从一个学生开始,然后你必须有一个有效的课程, 因为你说参考课程的idnumber列 表不能为空
  • 或者你从一门课程开始,那么你必须有一个有效的学生, 因为您说过列std_id不能为NULL
主要问题是,一名学生只能参加一门课程,而每门课程只能有一名学生。事实上,一个学生可以参加几门课程——每门课程可以有几个学生:多对多关系

解决方案是:

  • 从学生表中删除列idnumber
  • 从课程表中删除std_id列
  • 创建一个新表,例如student2courses,其中包含引用student and courses表的列,即
    id\u student
    id\u courses
    ,并在(id\u student,id\u courses)上具有唯一索引

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

是的,我从mysql复制/粘贴。:)您尚未提供所有相关信息。显示导致错误的表值和更新代码。阅读有关如何提问的链接。在提问之前,还可以搜索错误消息。感谢所有评论。非常感谢您的回答。这很有帮助,也很清楚。我还得多学习:)
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);