我对SQL非常陌生,我试图定义一个2个表Hospital和Hospital_Address,但是当我试图在Hospital_Address中添加外键时,它会抛出一个错误:"1215: Cannot add foreign key“
create table Hospital (
HId Int not null,
HName varchar(40) not null,
HDept int, Hbed Int,
HAreaCd int not null,
Primary Key (HId)
);
create table Hospital_Address (
HAreaCd Int not null,
HArea varchar(40) not null,
HCity varchar(40),
HAdd1 varchar(40),
HAdd2 varchar(40),
Primary Key (HArea),
foreign key (HAreaCd) references Hospital (HAreaCd));请在这方面帮助我。提前谢谢。
发布于 2014-07-09 21:05:07
MySQL要求父Hospital表中的HAreaCd列上有一个索引,以便在外键约束中引用该列。
规范模式是让外键引用父表的主键,尽管MySQL扩展了该模式以允许外键引用作为唯一键的列,而InnoDB则将其扩展(超出了SQL标准),并允许外键引用任何列集,只要存在以这些列作为前导列的索引(按照在外键约束中指定的相同顺序)。(也就是说,在InnoDB中,引用的列不需要是唯一的,尽管具有这种关系的行为可能不是您想要的。)
如果在Hospital表中为该列创建索引,例如:
CREATE INDEX Hospital_IX1 ON Hospital (HAreaCd);然后,可以创建引用该列的外键约束。
但是,因为这是MySQL和InnoDB的非标准扩展,所以“最佳实践”(如这里的其他答案所示)是由FOREIGN KEY引用外部表的PRIMARY KEY。理想情况下,这将是一个单一的列。
考虑到Hospital表的现有定义,引用外键的一个更好的选项是将Hid列添加到Hospital_Address表中
... ADD HId Int COMMENT 'FK ref Hospital.HId'
... ADD CONSTRAINT FK_Hospital_Address_Hospital
FOREIGN KEY (HId) REFERENCES Hospital (HId)要建立行之间的关系,需要填充新的HId列的值。
发布于 2014-07-09 20:59:19
通常不能将外键添加到另一个表的非主键元素中。
如果您确实需要这样做,请参考以下问题以获得帮助:Foreign Key to non-primary key
发布于 2014-07-09 20:58:31
医院表中的HAreaCd应该是主键。只有这样,才能在Hospital_Address表中引用它。
https://stackoverflow.com/questions/24663595
复制相似问题