给Staff表添加外键触发Error Code:1072错误,请求技术解决
问题分析与解决
操作过程
首先执行以下SQL语句,执行正常:
create table Hotel( hotelNo integer, name varchar(20), address varchar(20), StaffNo integer, PRIMARY KEY (hotelNo)); ALTER TABLE Hotel ADD FOREIGN KEY (staffNo) REFERENCES Staff(staffNo);
随后执行以下SQL,最后一行语句报错:
create table Staff( staffNo integer primary key, fName varchar(20), lName varchar(20), gender varchar (10), dob date, salary decimal, telNo decimal); ALTER TABLE Staff ADD FOREIGN KEY (hotelNo) REFERENCES Hotel(hotelNo);
错误信息
0 243 17:33:14 ALTER TABLE Staff ADD FOREIGN KEY (hotelNo) REFERENCES
Hotel(hotelNo) Error Code: 1072. Key column 'hotelNo' doesn't exist in
table 0.015 sec
错误原因
这是因为Staff表中根本不存在hotelNo字段。创建外键约束的前提是:当前表必须先有一个对应字段,用来关联父表的主键。你提到Room表执行相同操作成功,说明Room表在添加外键前已经提前创建了hotelNo字段,所以能正常执行。
解决方法
方案1:创建Staff表时直接添加字段和外键
如果是刚创建Staff表,直接修改建表语句,同时添加关联字段和外键:
create table Staff( staffNo integer primary key, fName varchar(20), lName varchar(20), gender varchar (10), dob date, salary decimal, telNo decimal, hotelNo integer, FOREIGN KEY (hotelNo) REFERENCES Hotel(hotelNo) );
方案2:先添加字段再设置外键
如果Staff表已存在(甚至已有数据),分两步执行:
- 先给Staff表添加
hotelNo字段:
ALTER TABLE Staff ADD COLUMN hotelNo integer;
- 再添加外键约束:
ALTER TABLE Staff ADD FOREIGN KEY (hotelNo) REFERENCES Hotel(hotelNo);
注意:如果Staff表已有数据,添加外键前要确保
hotelNo字段的所有值要么为NULL,要么在Hotel表的hotelNo中存在,否则会因数据不匹配导致外键创建失败。
内容的提问来源于stack exchange,提问作者Umair Khan
相关产品推荐
相关产品推荐

