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

标签 mysql sql

我是 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/

相关文章:

mysql - 检索为 Mysql 中的树数据定义的最后一个值

sql - 插入语句中带有jQuery的sqlcmd

php - MySQL 查询 : Getting COUNT of one table where the ID of table 1 has a value of X in a different table

php - 如何使用计算日期在 MySQL 中一次更新多行

mysql - 使用 Base64 Spring Boot 将图像上传到数据库

sql - GETDATE() 和 DateTime.Now 一样昂贵吗?

mysql - 在 MySQL 中将相似的行彼此相邻分组

php - MySQL 将多个列中的唯一项目分组,每个列有 COUNT 个?

mysql - 获取xxxx年未缴费成员(member)列表

mysql - SSIS:导出和导入带有特殊字符的CSV文件