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)

需要注意的是:

  • 列的数据类型(和长度或精度)必须相同

  • 外键中的列必须与主键中的列出现顺序相同

不相关:yeara language keyword in MySQL,因此列名不是一个好的选择。