gpt4 book ai didi

MySQL 错误代码 1215 : Cannot add foreign key Constraint

转载 作者:行者123 更新时间:2023-11-29 04:07:50 25 4
gpt4 key购买 nike

我是 SQL 的新手,我正在尝试定义 2 个表 HospitalHospital_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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com