我正在学习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中的代码。如果有人帮助我,我将不胜感激。
我为我糟糕的英语道歉。
答案 0 :(得分:2)
你引入了一个很好的问题。使用ALTER TABLE,如果两个表都为空,则确保不插入任何行。
主要问题是,一名学生只能参加一门课程 - 每门课程只能有一名学生。事实上,学生可以参加几门课程 - 每门课程都可以有几个学生:多对多的关系
此解决方案是junction table:
id_student
和id_courses
,其中包含唯一索引(id_student,id_courses)。 现在,您可以在没有课程的情况下插入新学生,并在没有学生的情况下插入新课程,并在需要时将学生分配到课程。