2016-10-11 89 views
-1

您好我很奇怪,为什么我得到一个错误不能添加或更新子行:外键约束失败

ERROR 1452(23000):不能添加或更新子行,外键 约束失败(examsentries,约束entries_ibfk_2 外键(student_id)参考文献studentsstudent_id))

任何帮助将appriatiated!

下面是我认为是相关的,我有这个问题的脚本,

首先我做了这个表项,并且一切都很好

CREATE TABLE entries(
subject_id INT UNSIGNED NOT NULL, 
subject_name VARCHAR(60) NOT NULL, 
level_of_entry VARCHAR(60) NOT NULL, 
exam_board VARCHAR(60) NOT NULL, 
student_id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
date_of_exam DATETIME NOT NULL, 
PRIMARY KEY (date_of_exam), 
FOREIGN KEY (subject_id) 
REFERENCES subjects(subject_id), 
FOREIGN KEY (student_id) 
REFERENCES students(student_id) 

然后我试图插入数据和我得到了错误。

INSERT INTO entries (subject_id,subject_name, level_of_entry, exam_board,date_of_exam) 
VALUE ('1','chemistry','as','ocr','2017-05-05 12:00:00'), 
('2','biology','gcse','aqa','2017-05-05 12:00:01'), 
('3','music','gcse','edexcel','2017-05-05 12:00:02'), 
('4','english','a','ocr','2017-05-05 12:00:03'), 
('5','physics','a','aqa','2017-05-05 12:00:04'), 
('6','maths','gcse','aqa','2017-05-05 12:00:05'), 
('7','computing','gcse','aqa','2017-05-05 12:00:06'), 
('8','physical_education','gcse','aqa','2017-05-05 12:00:07'), 
('9','design_and_technology','gcse','aqa','2017-05-05 12:00:08'), 
('10','french','gcse','aqa','2017-05-05 12:00:09'); 

它建议在类似这样以确保您的父表具有相同的价值观,但它和它的制作知道意义,我的其他问题。 这是父母的脚本。

CREATE TABLE IF NOT EXISTS students(
student_id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
first_name VARCHAR(20) NOT NULL, 
middle_name VARCHAR(20) NOT NULL, 
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 subjects(
subject_id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
subject_name VARCHAR(60) NOT NULL, 
level_of_entry VARCHAR(60) NOT NULL, 
exam_board VARCHAR(60) NOT NULL, 
PRIMARY KEY (subject_id) , 
UNIQUE (subject_id)); 

如果有人能帮助,我会非常感激!

+1

mysql或sql-server? – techspider

+0

你的'insert'语句中的'student_id'在哪里?你没有插入一个被定义为'not null'的值 – techspider

+2

我看到你在'entries'表中将它保持为Auto Increment;一个外键永远不会有自动递增值;这只能在你的“学生”中定义。从“条目”表中删除自动增量 – techspider

回答

1

有关与student_id相关的逻辑有两个问题。

  1. 你不应该有AUTO_INCREMENT外键的表。

具有外键的表不能自动填充值(逻辑上和技术上)。它必须在其主表中引用一些值。在你的情况下,它是students表。

因此,如下改变你的表结构:

CREATE TABLE entries(
subject_id INT UNSIGNED NOT NULL, 
subject_name VARCHAR(60) NOT NULL, 
level_of_entry VARCHAR(60) NOT NULL, 
exam_board VARCHAR(60) NOT NULL, 
student_id INT UNSIGNED NOT NULL, 
date_of_exam DATETIME NOT NULL, 
PRIMARY KEY (date_of_exam), 
FOREIGN KEY (subject_id) 
REFERENCES subjects(subject_id), 
FOREIGN KEY (student_id) 
REFERENCES students(student_id) 
  • 您应该entries
  • 指定您 INSERT查询值

    您需要确保您在entries表中为student_id列手动插入值。

    如您在subject_idINT中定义的注释中未指定的一面,但您尝试插入字符值。

    如下更改插入查询:

    INSERT INTO entries (subject_id,subject_name, level_of_entry, exam_board,date_of_exam, student_id) 
    VALUE (1,'chemistry','as','ocr','2017-05-05 12:00:00', 100), 
    (2,'biology','gcse','aqa','2017-05-05 12:00:01', 101); 
    

    注:我认为100和101从学生表现有的学生证。您需要用表格中正确的ID替换它们。

    相关问题