MYSQL - 无法添加外键约束,但为什么?
MYSQL - Cannot add foreign key constraint, but why?
我不明白我在尝试 运行 这段代码时无法添加外键约束。我将其缩小到最后一行:
外键(room_no)参考课堂(room_no)
给我这个错误,因为当我删除它时代码 运行 没问题。有人可以向我解释这个问题吗?这段代码是一个更大的代码块的一部分,我似乎 运行 后来遇到了同样的问题。
谢谢!
CREATE TABLE Classroom (
building VARCHAR(100),
room_no SMALLINT UNSIGNED,
capacity SMALLINT UNSIGNED,
CONSTRAINT PK_Prereq PRIMARY KEY (building, room_no)
);
CREATE TABLE Section (
course_id INT UNSIGNED,
sec_id INT UNSIGNED,
semester SMALLINT UNSIGNED,
year SMALLINT UNSIGNED,
building VARCHAR(100),
room_no SMALLINT UNSIGNED,
time_slot_id INT UNSIGNED,
CONSTRAINT PK_Prereq PRIMARY KEY (course_id, sec_id, semester, year),
FOREIGN KEY (building) REFERENCES Classroom(building),
FOREIGN KEY (room_no) REFERENCES Classroom(room_no)
);
您只需要一个外键而不是两个外键,它引用作为父项中主键的一组列 table。
所以改变这个:
FOREIGN KEY (building) REFERENCES Classroom(building),
FOREIGN KEY (room_no) REFERENCES Classroom(room_no)
收件人:
FOREIGN KEY (building, roo_no) REFERENCES Classroom(building, roo_no)
需要注意的是:
列的数据类型(和长度或精度)必须相同
外键中的列必须与主键中的列出现顺序相同
不相关:year
是 a language keyword in MySQL,因此列名不是一个好的选择。
我不明白我在尝试 运行 这段代码时无法添加外键约束。我将其缩小到最后一行:
外键(room_no)参考课堂(room_no)
给我这个错误,因为当我删除它时代码 运行 没问题。有人可以向我解释这个问题吗?这段代码是一个更大的代码块的一部分,我似乎 运行 后来遇到了同样的问题。 谢谢!
CREATE TABLE Classroom (
building VARCHAR(100),
room_no SMALLINT UNSIGNED,
capacity SMALLINT UNSIGNED,
CONSTRAINT PK_Prereq PRIMARY KEY (building, room_no)
);
CREATE TABLE Section (
course_id INT UNSIGNED,
sec_id INT UNSIGNED,
semester SMALLINT UNSIGNED,
year SMALLINT UNSIGNED,
building VARCHAR(100),
room_no SMALLINT UNSIGNED,
time_slot_id INT UNSIGNED,
CONSTRAINT PK_Prereq PRIMARY KEY (course_id, sec_id, semester, year),
FOREIGN KEY (building) REFERENCES Classroom(building),
FOREIGN KEY (room_no) REFERENCES Classroom(room_no)
);
您只需要一个外键而不是两个外键,它引用作为父项中主键的一组列 table。
所以改变这个:
FOREIGN KEY (building) REFERENCES Classroom(building),
FOREIGN KEY (room_no) REFERENCES Classroom(room_no)
收件人:
FOREIGN KEY (building, roo_no) REFERENCES Classroom(building, roo_no)
需要注意的是:
列的数据类型(和长度或精度)必须相同
外键中的列必须与主键中的列出现顺序相同
不相关:year
是 a language keyword in MySQL,因此列名不是一个好的选择。