在询问包括本网站上的这个问题之前,我已经彻底研究过了。使用外键创建mysql表时出错
我有一个学生表:
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)
);
我的问题是,当我尝试在第三个表中声明外键时,我得到一个错误,指出s ubject_id外键不在引用的表中。 错误1072(42000):表格中不存在键列'student_id',即使它明确包含在学生表内,同样适用于'subject_id'和主题表。 我确定我的声明外键的语法是正确的,所以我不确定如何解决这个问题。 所有帮助表示赞赏。谢谢。
我想你忘了在'entries'表中添加'student_id'和'subject_id'列。现在,'entries'表只有一列'exam_date'。你试图在一个不存在的列上的这个'entries'表中映射一个外键,这个列没有被定义 – Delphine
@Delphine所以我需要像在创建student_id和subject_id列一样,两张桌子? – MMM
没错。外键订单不会创建列。您必须创建它并在应用外部约束之后。要小心数据类型和长度,但是,如果你按照你的方式和主题声明了这两列,那将是完美的! PS:我发布它作为答案 – Delphine