Mysql 错误1452(23000):无法添加或更新子行:外键约束失败

Mysql 错误1452(23000):无法添加或更新子行:外键约束失败,mysql,Mysql,我到处寻找一个可能的解决办法,但什么也没找到 这是我的桌子: CREATE TABLE IF NOT EXISTS students( student_id INT UNSIGNED NOT NULL AUTO_INCREMENT, first_name VARCHAR(40) NOT NULL, middle_name VARCHAR(20), last_name VARCHAR(40) NOT NULL, email VARCHAR(60) NOT NULL, password CHAR(4

我到处寻找一个可能的解决办法,但什么也没找到

这是我的桌子:

CREATE TABLE IF NOT EXISTS students(
student_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
first_name VARCHAR(40) NOT NULL,
middle_name VARCHAR(20),
last_name VARCHAR(40) NOT NULL,
email VARCHAR(60) NOT NULL,
password CHAR(40) NOT NULL,
reg_date DATETIME NOT NULL,
PRIMARY KEY (student_id),
UNIQUE(email));
以及

最后,

CREATE TABLE IF NOT EXISTS entries (
entry_id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(entry_id),
student_id INT UNSIGNED NOT NULL,
subject_id INT UNSIGNED NOT NULL,
date_of_exam DATETIME NOT NULL,
FOREIGN KEY (student_id) REFERENCES students (student_id),
FOREIGN KEY (subject_id) REFERENCES subjects (subject_id));
我需要使用其他两个表中的外键将5条记录输入到表条目中。这是我用来将记录输入条目的代码:

INSERT INTO entries 
VALUES (NULL,   NULL,   NULL,   '2010-04-19'),
(NULL,  NULL,   NULL,   '2015-06-17'),
(NULL,  NULL,   NULL,   '2011-07-21'),
(NULL,  NULL,   NULL,   '2009-01-12'),
(NULL,  NULL,   NULL,   '2016-11-16');
返回此错误消息:

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`exams`.`entries`, CONSTRAINT `entries_ibfk_1` FOREIGN KEY (`student_id`) REFERENCES `students` (`student_id`)) 

如果您有任何想法或建议,我们将不胜感激。

您已将
条目
表中引用的列声明为
非空
,但您正在尝试为它们插入一个
值。这显然行不通

另外,由于您的
entry\u id
具有
AUTO\u INCREMENT
,您应该在INSERT语句中省略此列,因为它会自动填充,并且不能为
NULL

最好在语句中包含要插入值的列。鉴于上述情况,您的插入可能如下所示:

INSERT INTO entries ( student_id, subject_id, date_of_exam )
VALUES 
(?, ?, '2010-04-19'),
(?, ?, '2015-06-17'),
(?, ?, '2011-07-21'),
(?, ?, '2009-01-12'),
(?, ?, '2016-11-16');
您必须将
符号替换为与引用表中存储的符号相对应的值。如果表
主题
学生
没有这些值,那么在
条目
中添加行之前,您应该向这些表添加行,以便以后能够引用它们


最后一个注意事项-在执行插入操作时,不必指定表所拥有的所有列。这意味着,如果一个列是可空的,它将在其中放入一个
NULL
值,当然,除非您为它指定了
默认值。

您已将
条目
表中引用的列声明为
非空
,但您正在尝试为它们插入一个
NULL
值。这显然行不通

另外,由于您的
entry\u id
具有
AUTO\u INCREMENT
,您应该在INSERT语句中省略此列,因为它会自动填充,并且不能为
NULL

最好在语句中包含要插入值的列。鉴于上述情况,您的插入可能如下所示:

INSERT INTO entries ( student_id, subject_id, date_of_exam )
VALUES 
(?, ?, '2010-04-19'),
(?, ?, '2015-06-17'),
(?, ?, '2011-07-21'),
(?, ?, '2009-01-12'),
(?, ?, '2016-11-16');
您必须将
符号替换为与引用表中存储的符号相对应的值。如果表
主题
学生
没有这些值,那么在
条目
中添加行之前,您应该向这些表添加行,以便以后能够引用它们


最后一个注意事项-在执行插入操作时,不必指定表所拥有的所有列。这意味着,如果一个列可以为NULL,它将在其中放入一个
NULL
值,当然,除非您为它指定了
默认值。

在条目表中插入任何内容之前,您必须先插入students和subjects表中的记录,因为它们的主键被用作条目表中的外键

在这里,您必须使用以下命令删除外来约束或忽略外来检查

SET FOREIGN_KEY_CHECKS = 0;

在entries表中插入任何内容之前,必须先在students和subjects表中插入记录,因为它们的主键被用作entries表中的外键

在这里,您必须使用以下命令删除外来约束或忽略外来检查

SET FOREIGN_KEY_CHECKS = 0;

当您将字段定义为非null时,您希望如何插入null?@e4c5我不知道还有什么可以将您链接到entries表的学生ID和科目ID替换为null。当您将字段定义为非null时,您希望如何插入null?@e4c5我不知道还有什么可以放置学生ID您将条目表链接到的科目ID应替换为空。学生和科目都包含记录。如果在插入查询中使用这些记录,则学生和科目都包含记录。如果在插入查询中使用这些记录,则是的,因为有
,而您没有阅读整个答案?是的,因为有
,而你没有读完整的答案?