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),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)
); 

解决方法

您只希望一个外键而不是两个外键,它们引用作为父表主键的那组列。

所以改变这个:

requests.get(url2,params=data,headers=headers)

收件人:

FOREIGN KEY (building) REFERENCES Classroom(building),FOREIGN KEY (room_no) REFERENCES Classroom(room_no)

重要的是要注意:

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

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

不相关:FOREIGN KEY (building,roo_no) REFERENCES Classroom(building,roo_no) a language keyword in MySQL,因此不是列名的好选择。