3
我在添加一些外鍵約束到我的MySQL數據庫時遇到問題。例如,在本註冊表(用於記錄學生出席情況的考勤註冊表)中,我希望將fk_unit_id和fk_student_id作爲外鍵,引用Unit和Student中的主鍵。MySQL數據庫無法添加外鍵
註冊表:
CREATE TABLE IF NOT EXISTS register
(
fk_unit_id INT(4) NOT NULL,
fk_student_id INT(4) NOT NULL,
register_date DATE NOT NULL,
attendance CHAR(1) NOT NULL,
PRIMARY KEY (fk_unit_id, fk_student_id, register_date),
FOREIGN KEY (fk_unit_id) REFERENCES unit(unit_id),
FOREIGN KEY (fk_student_id) REFERENCES student(student_id)
);
學生表:
CREATE TABLE IF NOT EXISTS student
(
student_id INT(4) ZEROFILL NOT NULL AUTO_INCREMENT,
student_first_name VARCHAR(20) NOT NULL,
student_surname VARCHAR(20) NOT NULL,
student_dob DATE NOT NULL,
student_contact_no VARCHAR(11) NOT NULL,
student_email VARCHAR(30) NOT NULL,
student_address VARCHAR(50) NOT NULL,
student_image_name VARCHAR(30) NOT NULL,
PRIMARY KEY (student_id)
);
表單位:
CREATE TABLE IF NOT EXISTS unit
(
unit_id INT(4) ZEROFILL NOT NULL AUTO_INCREMENT,
unit_name VARCHAR(50) NOT NULL,
unit_day VARCHAR(10) NOT NULL,
unit_time VARCHAR (10) NOT NULL,
fk_course_code VARCHAR(4) NOT NULL,
fk_lecturer_id INT(4) NOT NULL,
PRIMARY KEY (unit_id),
FOREIGN KEY (fk_course_code) REFERENCES course(course_code),
FOREIGN KEY (fk_lecturer_id) REFERENCES lecturer(lecturer_id)
);
對於R ecord,fk_course_code可以和VARCHAR(4)的Course(course_code)一起工作,所以我想知道是否它不喜歡使用auto_increated主鍵作爲外鍵?
編輯
我收到錯誤代碼#1215 - 不能添加外鍵約束
任何幫助將非常感激!
mysql一般不關心字段是什麼類型。您幾乎可以將任何字段用作外鍵,但兩個表中的字段定義必須幾乎完全相同。例如您可以將'unsigned int'鏈接到'unsigned int',但不能將'int'鏈接到'bigint'或'varchar'鏈接到'text'。關於唯一的例外是子表中的字段可以爲空,即使父字段爲「非空」。 –
一名學生可以多次註冊同一個單位嗎?如果沒有,那麼我不認爲這是正確的:在這種情況下,'PRIMARY KEY(fk_unit_id,fk_student_id,register_date)''你只需要'PRIMARY KEY(fk_unit_id,fk_student_id)'。 – Maximus2012
你怎麼知道外鍵是不是工作?是否有任何錯誤消息,你得到? – Maximus2012