我到处寻找可能的解决方案而且找不到任何东西。
以下是我的表格:
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 subjects(
subject_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
subject_name VARCHAR(20) NOT NULL,
level_of_entry VARCHAR(12) NOT NULL,
exam_board VARCHAR(12) NOT NULL,
PRIMARY KEY (subject_id),
UNIQUE(subject_id));
最后,
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`))
任何想法或建议都将受到赞赏。
答案 0 :(得分:1)
您已将NOT NULL
表中的引用列声明为NULL
,但您尝试为它们插入entry_id
值。显然这不起作用。
此外,由于您的AUTO_INCREMENT
有NULL
,因此您应该在INSERT语句中省略此列,因为它填充了自身,也不能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');
。
最好在语句中包含要插入值的列。鉴于上述内容,您的插入内容可能如下所示:
?
您必须将subjects
符号替换为与引用表中存储的值相对应的值。如果表students
和entries
没有这些值,那么在NULL
中添加行之前,您应该向这些表添加行,以便以后能够引用它们。
最后一点 - 在执行INSERT时,您不必指定表所拥有的所有列。这意味着如果列可以为空,则会在其中加上default
值,除非您分配了{% block testBlock %} file1 {% endblock %}
。
答案 1 :(得分:1)
在条目表上插入任何内容之前,您必须先在学生和主题表上插入记录,因为它们的主键在条目表中用作外键。
在这里,您必须使用以下命令删除外国约束或忽略外国检查。
from ss in this.Data()
from sp in supRule
where
ss.StateID == sp.FromStateID ||
ss.StateID == sp.ToStateID
group new { ss, sp } by new
{
StateID = ss.StateID
} into g
select new
{
StateID = g.Key.StateID,
RuleCount = g.Count()
}