我在给MySQL数据库添加一些外键约束时遇到了问题。例如,在这个Register表中(用于记录学生出勤的考勤注册表),我想将fk_unit_id和fk_student_id作为外键,引用Unit和Student的主键。
Register表:
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)
);
记录一下,fk_course_code可以与课程(course_code)一起使用,该课程是VARCHAR(4),所以我想知道是否不喜欢使用自动递增的主键作为外键??
编辑
我收到错误代码#1215-无法添加外键限制
非常感谢您的帮助!
PRIMARY KEY (fk_unit_id, fk_student_id, register_date)
,在这种情况下你只需要PRIMARY KEY (fk_unit_id, fk_student_id)
。 - Maximus2012INDEX (fk_course_code), FOREIGN KEY (fk_course_code) REFERENCES course(course_code)
。但我不确定这是否是您问题的根源。 - The 42nd Doctor