MySQL Error Code 1822解决方法

通常来说这个报错都是因为引用的外键在parent table中不是主键或不是unique导致的。但是今天碰到了下面的情况:

这是ER图的一部分,其中bed table的主键是(dorm_id, room_id, bed_id), dorm_id和room_id是外键,
开始时我的定义是:

create table bed(
dorm_id varchar(45) not null,
room_id varchar(45) not null,
bed_id varchar(45) not null,
is_long varchar(45) not null,
primary key(dorm_id, room_id, bed_id),
foreign key(dorm_id) references room(dorm_id),
foreign key(room_id) references room(room_id)
)engine=InnoDB default charset=utf8;

结果提示error 1822。但是dorm_id和room_id在room表中确实定义为了PK
后来仔细一想,room表的主键是(dorm_id, room_id),因此不能把他们分开引用,要一起引用。
改为:

create table bed(
dorm_id varchar(45) not null,
room_id varchar(45) not null,
bed_id varchar(45) not null,
is_long varchar(45) not null,
primary key(dorm_id, room_id, bed_id),
foreign key(dorm_id, room_id) references room(dorm_id, room_id) 
)engine=InnoDB default charset=utf8;

即可。

原文地址:https://www.cnblogs.com/shijiyuanaa/p/12654447.html