2017-01-11 56 views
0

這是確切的錯誤WAMP當我運行從外部文件子代碼調用entries.txt不能添加外部指標約束

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; 
+0

爲什麼要在兩個不同的表中命名?這是兩個不同的名字嗎? 'exam_board'同上。 –

回答

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;