无法添加外部索引约束

时间:2017-01-11 12:55:37

标签: mysql innodb

当我从名为entries.txt的外部文件运行子代码时,这是WAMP返回的确切错误

  

ERROR 1215(HY000):无法添加外部索引约束

我需要能够将父表连接到子表,以便可以轻松地在表之间建立链接。 问题陈述:

  

再次使用查询脚本创建并填充名为entries的第三个表。   此表应包含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 CHAR(30) NOT NULL,
level_of_entry VARCHAR(10) NOT NULL,
exam_board CHAR(20) NOT NULL,
PRIMARY KEY (subject_id));

子表:

CREATE TABLE IF NOT EXISTS entries(

date_of_exam DATETIME NOT NULL,    
first_name VARCHAR,
middle_name VARCHAR,
last_name VARCHAR,
subject_name CHAR,
level_of_entry VARCHAR,
exam_board CHAR, 

INDEX idx_first_name(first_name),
INDEX idx_middle_name(middle_name),
INDEX idx_last_name(last_name),
INDEX idx_subject_name(subject_name),
INDEX idx_level_of_entry(level_of_entry),
INDEX idx_exam_board(exam_board),    
PRIMARY KEY (date_of_exam),

CONSTRAINT fk_first_name FOREIGN KEY (first_name) REFERENCES students(first_name),
CONSTRAINT fk_middle_name FOREIGN KEY (middle_name) REFERENCES students(middle_name),
CONSTRAINT fk_last_name FOREIGN KEY (last_name) REFERENCES students(last_name),   
CONSTRAINT fk_subject_name FOREIGN KEY (subject_name) REFERENCES subjects(subject_name),
CONSTRAINT fk_level_of_entry FOREIGN KEY (level_of_entry) REFERENCES subjects(level_of_entry),
CONSTRAINT fk_exam_board FOREIGN KEY (exam_board) REFERENCES subjects(exam_board)    
)ENGINE=InnoDB;

1 个答案:

答案 0 :(得分:0)

子表中的外键必须仅引用父表的主键。您不需要创建父表的每个属性列的克隆,只需要创建主键列。如果您需要阅读其他属性,则可以使用JOIN编写查询。

CREATE TABLE IF NOT EXISTS entries(
  student_id INT UNSIGNED NOT NULL,
  subject_id INT UNSIGNED NOT NULL,
  date_of_exam DATETIME NOT NULL,    
  PRIMARY KEY (student_id, subject_id, date_of_exam),
  CONSTRAINT fk_student FOREIGN KEY (student_id) REFERENCES students(student_id),
  CONSTRAINT fk_subject FOREIGN KEY (subject_id) REFERENCES subjects(subject_id),
)ENGINE=InnoDB;