问题描述
我不明白尝试运行此代码时无法添加外键约束。我将其范围缩小到最后一行:
外键(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,因此不是列名的好选择。