我是 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));
请在这方面帮助我。提前致谢。
最佳答案
MySQL 要求父 Hospital
表中的 HAreaCd
列有一个索引,以便您在 FOREIGN KEY 约束中引用该列。
规范模式是外键引用父表的主键,尽管 MySQL 扩展了它以允许外键引用作为 UNIQUE KEY 的列,而 InnoDB 扩展了它(超出了 SQL 标准)并允许 FOREIGN KEY 引用任何列集,只要存在以这些列作为前导列的索引(按照外键约束中指定的相同顺序)。(也就是说,在 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
列的值。
关于MySQL 错误代码 1215 : Cannot add foreign key Constraint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24663595/