使用外键创建mysql表时出错

时间:2016-11-28 15:56:43

标签: mysql foreign-keys

我在问这个问题之前已经彻底研究过了。

我有一张学生表:

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

我现在正在创建一个表格来链接上面的表格:

CREATE TABLE IF NOT EXISTS entries(
exam_date DATETIME NOT NULL,
FOREIGN KEY (student_id) REFERENCES students (student_id),
FOREIGN KEY (subject_id) REFERENCES subjects (subject_id)
);

我的问题是,当我尝试在名为entries的第三个表中声明外键时,我收到一条错误,指出subject_id外键不在引用的表中。 ERROR 1072(42000):关键栏' student_id'表格中不存在,即使它明显包含在学生表格内,同样适用于'subject_id'和主题表。 我确定我声明外键的语法是正确的,所以我不确定如何解决问题。 所有帮助表示赞赏。谢谢。

1 个答案:

答案 0 :(得分:2)

在应用外键约束之前,您忘了创建这两列:

CREATE TABLE IF NOT EXISTS entries(
exam_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
student_id INT UNSIGNED NOT NULL,
subject_id INT UNSIGNED NOT NULL,
exam_date DATETIME NOT NULL,
PRIMARY KEY (exam_id),
FOREIGN KEY (student_id) REFERENCES students (student_id),
FOREIGN KEY (subject_id) REFERENCES subjects (subject_id)
);

编辑:

我建议您在每个表中添加一个唯一的ID列(此处:exam_id)。